亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript 匿名函數(shù)及其代碼模式原理

 更新時(shí)間:2010年03月19日 11:32:51   作者:  
很多同學(xué)知道怎么用這種匿名函數(shù),卻或許并不明白為什么這樣寫(xiě)就能夠調(diào)用匿名函數(shù)。也許知道后面的圓括號(hào)是執(zhí)行前面的函數(shù),而并不清楚前面的圓括號(hào)具有何種含義!本文將帶你了解匿名函數(shù)的代碼模式原理。
關(guān)于什么是匿名函數(shù),及它帶來(lái)的優(yōu)勢(shì)在本文就不深究了,先拋出一個(gè)常用的匿名函數(shù):
(function(){alert('yo')})()
很多同學(xué)知道怎么用這種匿名函數(shù),卻或許并不明白為什么這樣寫(xiě)就能夠調(diào)用匿名函數(shù)。也許知道后面的圓括號(hào)是執(zhí)行前面的函數(shù),而并不清楚前面的圓括號(hào)具有何種含義!本文將帶你了解匿名函數(shù)的代碼模式原理。
OK,先來(lái)看看更多匿名函數(shù)調(diào)用模式:
復(fù)制代碼 代碼如下:

(function(){alert(1);}())
(function(){alert(2);})()
void function(){alert(3);}()

以上3個(gè)都是正確的,且在功能上都是等同的。
再來(lái)看下錯(cuò)誤的書(shū)寫(xiě)方式:
4.
function(){alert('yo')}()
上面這段代碼會(huì)拋出語(yǔ)法錯(cuò)誤,這究竟是為什么呢?帶著這個(gè)問(wèn)題我們來(lái)看看秦歌給出的解答:
1.函數(shù)字面量:首先聲明一個(gè)函數(shù)對(duì)象,然后執(zhí)行它。
2.優(yōu)先表達(dá)式:由于Javascript執(zhí)行表達(dá)式是從圓括號(hào)里面到外面,所以可以用圓括號(hào)強(qiáng)制執(zhí)行聲明的函數(shù)。
3.void操作符:用void操作符去執(zhí)行一個(gè)沒(méi)有用圓括號(hào)包圍的一個(gè)單獨(dú)操作數(shù)。
好吧,先不管解答是否正確,我們把這些放到一邊,再來(lái)看看函數(shù)聲明的語(yǔ)法和函數(shù)表達(dá)式的語(yǔ)法說(shuō)明:
一、函數(shù)聲明:
復(fù)制代碼 代碼如下:

function name([param[, param[, ... param]]]) {
statements
}

這里的函數(shù)名稱(chēng)name是不可以省略的。如果省略了函數(shù)名稱(chēng)就會(huì)報(bào)錯(cuò)。
這也合理解釋了為什么直接寫(xiě)
function(){alert('yo')}
會(huì)出錯(cuò)?因?yàn)榫幾g器當(dāng)他是函數(shù)聲明而代碼中沒(méi)有出現(xiàn)函數(shù)名稱(chēng),結(jié)果可想而知。
二、函數(shù)表達(dá)式:
復(fù)制代碼 代碼如下:

function [name]([param] [, param] [..., param]) {
statements
}

函數(shù)名稱(chēng)name可以被省略,省略name就是所謂的匿名函數(shù)。說(shuō)明一點(diǎn):如果需要?jiǎng)?chuàng)建匿名函數(shù),則必須給出一個(gè)函數(shù)表達(dá)式而非函數(shù)的顯式聲明
現(xiàn)在我們可以做出更準(zhǔn)確的解釋?zhuān)?
1\2\3匿名函數(shù)代碼模式只不過(guò)是通過(guò)括號(hào)或者void告訴編譯器,把function(){}當(dāng)作函數(shù)表達(dá)式來(lái)解釋罷了。這其中并沒(méi)有那么復(fù)雜的優(yōu)先級(jí)和void操作符原理。這只不過(guò)是一個(gè)簡(jiǎn)單的語(yǔ)法轉(zhuǎn)換。
可以想象,只要符合函數(shù)表達(dá)式的語(yǔ)法,我們就可以創(chuàng)建出N種匿名函數(shù)代碼模式,比如
復(fù)制代碼 代碼如下:

!!function(){
alert('yo');
}()
+function(){
alert('yo');
}()

等等等等……
這其中并沒(méi)有更深層的奧秘,只是函數(shù)聲明與表達(dá)式的區(qū)別,如果你還不理解,也許就是你想多了想復(fù)雜了。
我們現(xiàn)在學(xué)習(xí)Javascript還沒(méi)有特專(zhuān)業(yè)的培訓(xùn)安排與課程,編碼能力的提升都是要靠自己平時(shí)的練習(xí)與積累。然而越是這樣越容易忽略最基礎(chǔ)的知識(shí),最后把簡(jiǎn)單的問(wèn)題復(fù)雜化,不可取。更有些同學(xué)是抱著能夠使用的態(tài)度學(xué)習(xí)Javascript,而并不去深究,知其然而不知其所以然,其實(shí)到最后能力并沒(méi)有多大的提升……更不可??!
延伸閱讀:
What do parentheses surrounding a JavaScript function declaration mean?

相關(guān)文章

  • javascript預(yù)加載圖片、css、js的方法示例介紹

    javascript預(yù)加載圖片、css、js的方法示例介紹

    預(yù)加載的好處可以讓網(wǎng)頁(yè)更快的呈現(xiàn)給用戶,缺點(diǎn)就是可能會(huì)增加無(wú)用的請(qǐng)求,不多說(shuō)了,作為一個(gè)前端攻城師都懂的,下面分享我做的測(cè)試和得到的結(jié)果
    2013-10-10
  • javascript時(shí)間排序算法實(shí)現(xiàn)活動(dòng)秒殺倒計(jì)時(shí)效果

    javascript時(shí)間排序算法實(shí)現(xiàn)活動(dòng)秒殺倒計(jì)時(shí)效果

    這篇文章主要介紹了javascript時(shí)間排序算法實(shí)現(xiàn)活動(dòng)秒殺倒計(jì)時(shí)效果,即一個(gè)頁(yè)面多個(gè)倒計(jì)時(shí)排序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • js獲取html參數(shù)及向swf傳遞參數(shù)應(yīng)用介紹

    js獲取html參數(shù)及向swf傳遞參數(shù)應(yīng)用介紹

    HTML頁(yè)面是在客戶端執(zhí)行的,這樣要獲取參數(shù)必須使用客戶端腳本如JavaScript,在這點(diǎn)上與服務(wù)器端腳本獲取參數(shù)方式有所不同接下來(lái)將詳細(xì)介紹下感興趣的你可不要錯(cuò)過(guò)了哈
    2013-02-02
  • 使用three.js 繪制三維帶箭頭線的詳細(xì)過(guò)程

    使用three.js 繪制三維帶箭頭線的詳細(xì)過(guò)程

    遇到一個(gè)需求,在一個(gè)地鐵場(chǎng)景里展示逃生路線,為了畫(huà)這個(gè)箭頭,我花費(fèi)了很多時(shí)間精力,下面基于使用three.js 繪制三維帶箭頭線的詳細(xì)過(guò)程分享給大家,感興趣的朋友一起看看吧
    2021-10-10
  • 非??犰诺腂ootstrap圖片輪播動(dòng)畫(huà)

    非??犰诺腂ootstrap圖片輪播動(dòng)畫(huà)

    這篇文章主要為大家分享了非??犰诺腂ootstrap圖片輪播動(dòng)畫(huà),幾行jQuery和animate.css庫(kù)用在基本的Bootstrap輪播組件中,感興趣的小伙伴們可以參考一下
    2016-05-05
  • uniapp中input聚焦禁止軟鍵盤(pán)彈出方法

    uniapp中input聚焦禁止軟鍵盤(pán)彈出方法

    在使用uni-app完成掃碼功能時(shí),有時(shí)需要聚焦文本框的同時(shí),需要軟鍵盤(pán)消失,下面這篇文章主要給大家介紹了關(guān)于uniapp中input聚焦禁止軟鍵盤(pán)彈出的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • JavaScript?中從?URL?獲取數(shù)據(jù)的方法

    JavaScript?中從?URL?獲取數(shù)據(jù)的方法

    這篇文章主要介紹了在?JavaScript?中從?URL?獲取數(shù)據(jù),我們使用了open函數(shù),將請(qǐng)求方法類(lèi)型和URL作為參數(shù)傳遞,并調(diào)用XMLHttpRequest()的send()方法,結(jié)合示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • JavaScript如何刪除字符串中子字符串

    JavaScript如何刪除字符串中子字符串

    本文介紹了如何從?JavaScript?中的字符串中刪除子字符串,并提供了兩種常用的方法:replace()?方法和?split()?方法,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-05-05
  • gulp-uglify 與gulp.watch()配合使用時(shí)報(bào)錯(cuò)(重復(fù)壓縮問(wèn)題)

    gulp-uglify 與gulp.watch()配合使用時(shí)報(bào)錯(cuò)(重復(fù)壓縮問(wèn)題)

    gulp是基于Nodejs的自動(dòng)任務(wù)運(yùn)行器,gulp 和 grunt 非常類(lèi)似,但相比于 grunt 的頻繁 IO 操作,gulp 的流操作,能更快地更便捷地完成構(gòu)建工作。今天在學(xué)習(xí)gulp時(shí)遇到當(dāng)用gulp.watch來(lái)監(jiān)聽(tīng)js文件的變動(dòng)時(shí)出現(xiàn)重復(fù)壓縮問(wèn)題,下面小編給大家解答下
    2016-08-08
  • JavaScript設(shè)計(jì)模式中的橋接和中介者模式

    JavaScript設(shè)計(jì)模式中的橋接和中介者模式

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式中的橋接和中介者模式,橋接設(shè)計(jì)模式是一種偏向于組合的設(shè)計(jì)模式,而非繼承的設(shè)計(jì)模式,實(shí)現(xiàn)的細(xì)節(jié)從一個(gè)模塊推送給另一個(gè)具有單獨(dú)模塊的對(duì)象,而中介者設(shè)計(jì)模式是指通過(guò)一個(gè)中介者對(duì)象封裝一系列的對(duì)象交互
    2022-06-06

最新評(píng)論