js自執(zhí)行函數(shù)的幾種不同寫法的比較
更新時(shí)間:2012年08月16日 11:31:19 作者:
js自執(zhí)行函數(shù)的幾種不同寫法的比較,需要的朋友可以參考下
經(jīng)常需要一個(gè)函數(shù)自執(zhí)行,可惜這一種寫法是錯(cuò)的:
function(){alert(1);}();
原因是前半段“function(){alert(1);}”被當(dāng)成了函數(shù)聲明,而不是一個(gè)函數(shù)表達(dá)式,從而讓后面的“();”變得孤立,產(chǎn)生語法錯(cuò)。
按上面的分析,這一段代碼雖說沒有語法錯(cuò),但也是不符合我們的預(yù)期的,因?yàn)檫@個(gè)函數(shù)并沒有自執(zhí)行。
function(){alert(1);}(1);
綜上,癥結(jié)在于,如何明確代碼描述的是一個(gè)函數(shù)表達(dá)式,而不是函數(shù)聲明語句。
正確的寫法多種多樣,也各有利弊:
方法1:最前最后加括號(hào)
(function(){alert(1);}());
這是jslint推薦的寫法,好處是,能提醒閱讀代碼的人,這段代碼是一個(gè)整體。
例如,在有語法高亮匹配功能的編輯器里,光標(biāo)在第一個(gè)左括號(hào)后時(shí),最后一個(gè)右括號(hào)也會(huì)高亮,看代碼的人一眼就可以看到這個(gè)整體。
不過,對(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)算符,常見的是!與void 。
!function(){alert(1);}();
void function(){alert(2);}();
顯然,加上“!”或“+”等運(yùn)算符,寫起來是最簡單的。
加上“void ”要敲五下鍵盤,但是聽說有一個(gè)好處是,比加"!"少一次邏輯運(yùn)算。----我只是聽說,不明所以。
最后,代表我個(gè)人,強(qiáng)烈支持方法1,即jslint的推薦寫法:
(function(){alert(1);}());
復(fù)制代碼 代碼如下:
function(){alert(1);}();
原因是前半段“function(){alert(1);}”被當(dāng)成了函數(shù)聲明,而不是一個(gè)函數(shù)表達(dá)式,從而讓后面的“();”變得孤立,產(chǎn)生語法錯(cuò)。
按上面的分析,這一段代碼雖說沒有語法錯(cuò),但也是不符合我們的預(yù)期的,因?yàn)檫@個(gè)函數(shù)并沒有自執(zhí)行。
復(fù)制代碼 代碼如下:
function(){alert(1);}(1);
綜上,癥結(jié)在于,如何明確代碼描述的是一個(gè)函數(shù)表達(dá)式,而不是函數(shù)聲明語句。
正確的寫法多種多樣,也各有利弊:
方法1:最前最后加括號(hào)
復(fù)制代碼 代碼如下:
(function(){alert(1);}());
這是jslint推薦的寫法,好處是,能提醒閱讀代碼的人,這段代碼是一個(gè)整體。
例如,在有語法高亮匹配功能的編輯器里,光標(biāo)在第一個(gè)左括號(hào)后時(shí),最后一個(gè)右括號(hào)也會(huì)高亮,看代碼的人一眼就可以看到這個(gè)整體。
不過,對(duì)于某些寫代碼不喜歡在行后加分號(hào)的同學(xué),也會(huì)形成一些坑坑,例如以下代碼會(huì)報(bào)運(yùn)行錯(cuò):
復(fù)制代碼 代碼如下:
var a=1
(function(){alert(1);}());
方法2:function外面加括號(hào)
復(fù)制代碼 代碼如下:
(function(){alert(1);})();
這種做法比方法1少了一個(gè)代碼整體性的好處。
方法3:function前面加運(yùn)算符,常見的是!與void 。
復(fù)制代碼 代碼如下:
!function(){alert(1);}();
void function(){alert(2);}();
顯然,加上“!”或“+”等運(yùn)算符,寫起來是最簡單的。
加上“void ”要敲五下鍵盤,但是聽說有一個(gè)好處是,比加"!"少一次邏輯運(yùn)算。----我只是聽說,不明所以。
最后,代表我個(gè)人,強(qiáng)烈支持方法1,即jslint的推薦寫法:
復(fù)制代碼 代碼如下:
(function(){alert(1);}());
相關(guān)文章
JavaScript截取指定長度字符串點(diǎn)擊可以展開全部代碼
這篇文章主要介紹了JavaScript截取指定長度字符串點(diǎn)擊可以展開全部代碼 的相關(guān)資料,需要的朋友可以參考下2015-12-12
JavaScript之瀏覽器對(duì)象_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
JavaScript可以獲取瀏覽器提供的很多對(duì)象,并進(jìn)行操作。下面通過本文給大家介紹JavaScript之瀏覽器對(duì)象的相關(guān)知識(shí),一起看看吧2017-07-07
代碼實(shí)例ajax實(shí)現(xiàn)點(diǎn)擊加載更多數(shù)據(jù)圖片
在本篇文章里我們給大家分享了關(guān)于ajax實(shí)現(xiàn)點(diǎn)擊加載更多數(shù)據(jù)圖片的相關(guān)代碼知識(shí)點(diǎn),有興趣的朋友們參考下。2018-10-10
Javascript獲取數(shù)組中的最大值和最小值的方法匯總
比較數(shù)組中數(shù)值的大小是比較常見的操作,下面同本文給大家分享四種放哪廣發(fā)獲取數(shù)組中最大值和最小值,對(duì)此感興趣的朋友一起學(xué)習(xí)吧2016-01-01
前端實(shí)現(xiàn)電子簽名的步驟及注意事項(xiàng)
本文詳細(xì)介紹了前端技術(shù)中電子簽名的實(shí)現(xiàn)方法,包括技術(shù)選型如HTML5?Canvas和SVG,以及實(shí)現(xiàn)步驟和數(shù)據(jù)安全措施,電子簽名確保了法律效力和數(shù)據(jù)的安全性,適用于多種文件簽署需求,需要的朋友可以參考下2024-11-11
Webpack常見靜態(tài)資源處理-模塊加載器(Loaders)+ExtractTextPlugin插件
這篇文章主要介紹了Webpack常見靜態(tài)資源處理-模塊加載器(Loaders)+ExtractTextPlugin插件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
js讀寫COOKIE實(shí)現(xiàn)記住帳號(hào)或密碼的代碼(js讀寫COOKIE)
js實(shí)現(xiàn)記住帳號(hào)或密碼(js讀寫COOKIE) 的實(shí)現(xiàn)代碼,原理就是利用cookies保存于讀取功能。2010-05-05

