最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

函數(shù)名稱name可以被省略,省略name就是所謂的匿名函數(shù)。說(shuō)明一點(diǎn):如果需要?jiǎng)?chuàng)建匿名函數(shù),則必須給出一個(gè)函數(shù)表達(dá)式而非函數(shù)的顯式聲明
現(xiàn)在我們可以做出更準(zhǔ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)有特專業(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)文章

最新評(píng)論

巴中市| 新邵县| 枣庄市| 万宁市| 奉贤区| 武宣县| 沧源| 德令哈市| 永仁县| 伊川县| 静宁县| 巴林左旗| 黑龙江省| 当雄县| 宝山区| 永安市| 筠连县| 呼图壁县| 通榆县| 珠海市| 安多县| 若羌县| 新建县| 松溪县| 宁都县| 襄汾县| 罗城| 黔东| 墨玉县| 马龙县| 长宁县| 武汉市| 肇州县| 观塘区| 石棉县| 沂源县| 东辽县| 宁陕县| 蓝山县| 吉林省| 嫩江县|