js自執(zhí)行函數(shù)的幾種不同寫法的比較
function(){alert(1);}();
原因是前半段“function(){alert(1);}”被當(dāng)成了函數(shù)聲明,而不是一個(gè)函數(shù)表達(dá)式,從而讓后面的“();”變得孤立,產(chǎn)生語(yǔ)法錯(cuò)。
按上面的分析,這一段代碼雖說(shuō)沒(méi)有語(yǔ)法錯(cuò),但也是不符合我們的預(yù)期的,因?yàn)檫@個(gè)函數(shù)并沒(méi)有自執(zhí)行。
function(){alert(1);}(1);
綜上,癥結(jié)在于,如何明確代碼描述的是一個(gè)函數(shù)表達(dá)式,而不是函數(shù)聲明語(yǔ)句。
正確的寫法多種多樣,也各有利弊:
方法1:最前最后加括號(hào)
(function(){alert(1);}());
這是jslint推薦的寫法,好處是,能提醒閱讀代碼的人,這段代碼是一個(gè)整體。
例如,在有語(yǔ)法高亮匹配功能的編輯器里,光標(biāo)在第一個(gè)左括號(hào)后時(shí),最后一個(gè)右括號(hào)也會(huì)高亮,看代碼的人一眼就可以看到這個(gè)整體。
不過(guò),對(duì)于某些寫代碼不喜歡在行后加分號(hào)的同學(xué),也會(huì)形成一些坑坑,例如以下代碼會(huì)報(bào)運(yùn)行錯(cuò):
var a=1
(function(){alert(1);}());
方法2:function外面加括號(hào)
(function(){alert(1);})();
這種做法比方法1少了一個(gè)代碼整體性的好處。
方法3:function前面加運(yùn)算符,常見(jiàn)的是!與void 。
!function(){alert(1);}();
void function(){alert(2);}();
顯然,加上“!”或“+”等運(yùn)算符,寫起來(lái)是最簡(jiǎn)單的。
加上“void ”要敲五下鍵盤,但是聽(tīng)說(shuō)有一個(gè)好處是,比加"!"少一次邏輯運(yùn)算。----我只是聽(tīng)說(shuō),不明所以。
最后,代表我個(gè)人,強(qiáng)烈支持方法1,即jslint的推薦寫法:
(function(){alert(1);}());
相關(guān)文章
javascript suggest效果 自動(dòng)完成實(shí)現(xiàn)代碼分享
像百度與google,當(dāng)我們往搜索框輸入東西時(shí)就會(huì)出現(xiàn)一排列表提示用戶有什么熱門或適合的候選詞,這種效果就叫suggest。本文將一步步教你如何設(shè)計(jì)它2012-02-02使用JS監(jiān)聽(tīng)鍵盤按下事件(keydown event)
這篇文章主要介紹了使用JS監(jiān)聽(tīng)鍵盤按下事件(keydown event),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11多個(gè)表單中如何獲得這個(gè)文件上傳的網(wǎng)址實(shí)現(xiàn)js代碼
假設(shè)一個(gè)網(wǎng)頁(yè)里有多個(gè)表單,其中一個(gè)表單里有文件上傳,問(wèn)題是如何獲得這個(gè)文件上傳的網(wǎng)址呢,接下來(lái)為大家介紹下實(shí)現(xiàn)的js代碼,感興趣的朋友可以參考下哈,希望可以幫助到你2013-03-03Javascript之旅 對(duì)象的原型鏈之由來(lái)
本人是Javascript菜鳥,下面是前幾天學(xué)習(xí)Javascript的旅程心得,希望對(duì)和我一樣的入門者有點(diǎn)用,也希望高手批評(píng)指正。2010-08-08Bootstrap彈出帶合法性檢查的登錄框?qū)嵗a【推薦】
這篇文章主要介紹了Bootstrap彈出帶合法性檢查的登錄框?qū)嵗a【推薦】的相關(guān)資料,需要的朋友可以參考下2016-06-06js實(shí)現(xiàn)瀏覽器的各種菜單命令比如打印、查看源文件等等
瀏覽器的各種菜單命令比如打印、查看源文件、加入收藏等等,這些在js中時(shí)完全可以實(shí)現(xiàn)的,本文搜集整理了一些,感興趣的朋友可以參考下2013-10-10淺談js中的attributes和Attribute的用法與區(qū)別
這篇文章主要介紹了淺談js中的attributes和Attribute的用法與區(qū)別,attributes可以獲取一個(gè)對(duì)象中的一個(gè)屬性,attributes 屬性返回指定節(jié)點(diǎn)屬性的集合,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07javascript設(shè)計(jì)模式之模塊模式學(xué)習(xí)筆記
這篇文章主要為大家詳細(xì)介紹了javascript設(shè)計(jì)模式之模塊模式學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02