本文導(dǎo)讀:js立即執(zhí)行函數(shù)可以讓你的函數(shù)在創(chuàng)建后立即執(zhí)行,js立即執(zhí)行函數(shù)模式是一種語法,可以讓你的函數(shù)在定義后立即被執(zhí)行,這種模式本質(zhì)上就是函數(shù)表達(dá)式(命名的或者匿名的),在創(chuàng)建后立即執(zhí)行。
一、JS立即執(zhí)行函數(shù)的寫法
方式1、最前最后加括號(hào)
(function(){alert(1);}());
方式2、function外面加括號(hào)
(function(){alert(1);})();
方式3、function前面加運(yùn)算符,常見的是!與void
!function(){alert(1);}(); void function(){alert(2);}();
二、立即執(zhí)行函數(shù)的參數(shù)
可以給立即執(zhí)行函數(shù)傳遞參數(shù),例如
(function(who, when) { console.log("I met " + who + " on " + when);
} ("Joe Black", new Date()));
記住:
1、立即函數(shù)內(nèi)部是可以訪問外部變量的,所以很多情況下,我們并不需要傳參數(shù)。如:jQuery的window實(shí)參,如果不傳入。內(nèi)部也是可以直接使用的。
2、通常你不應(yīng)該給立即執(zhí)行函數(shù)傳遞太多的函數(shù),因?yàn)樗芸鞎?huì)成為一個(gè)負(fù)擔(dān)——為了理解代碼是如何工作的,你不得不經(jīng)常上下滾動(dòng)源代碼。
三、立即執(zhí)行函數(shù)的返回值
像其它任何函數(shù)一樣,一個(gè)立即執(zhí)行函數(shù)也能返回值并且可以復(fù)制給其它變量,例如
var result = (function () { return 2 + 2;
}());
var result = (function () { return 2 + 2;
})();
四、立即執(zhí)行函數(shù)的好處
1、立即執(zhí)行函數(shù)模式被廣泛使用,它可以幫你封裝大量的工作而不會(huì)在背后遺留任何全局變量。
2、定義的所有變量都會(huì)成員立即執(zhí)行函數(shù)的局部變量,所以你不用擔(dān)心這些臨時(shí)變量會(huì)污染全局空間。
3、這種模式經(jīng)常被使用在書簽工具(bookmarklets)中,因?yàn)闀灩ぞ咴谌魏雾撁嫔线\(yùn)行并且保持全局命名空間干凈是非常必要的;
4、這種模式也可以讓你將獨(dú)立的功能封裝在自包含模塊中。
5、可以將這些代碼封裝進(jìn)一個(gè)立即執(zhí)行函數(shù)中,并且確保頁面沒有它的情況下也能正常工作。
6、可以添加更多的加強(qiáng)模塊,移除它們,單獨(dú)測(cè)試它們,允許用戶去禁用它們等等。
五、注意點(diǎn)
立即執(zhí)行函數(shù)通常作為一個(gè)單獨(dú)模塊使用。一般沒有問題,但是,建議在自己寫的立即執(zhí)行函數(shù)前加分號(hào),這樣可以有效地與前面代碼進(jìn)行隔離。否則,可能出現(xiàn)意想不到的錯(cuò)誤。
例如
var c = 12
var d = c
(function () { var e = 14; }())
會(huì)報(bào)這樣一個(gè)錯(cuò)誤:
注:轉(zhuǎn)載于http://www.cnblogs.com/lodingzone/p/5341143.html