一、JS立即執行函數的寫法
方式1、最前最后加括號


(function(){alert(1);}());

方式2、function外面加括號


(function(){alert(1);})();

方式3、function前面加運算符,常見的是!與void



!function(){alert(1);}();
void function(){alert(2);}(); 
二、立即執行函數的參數
可以給立即執行函數傳遞參數,例如



(function(who, when) {
console.log("I met " + who + " on " + when);
} ("Joe Black", new Date()));

記住:
1、立即函數內部是可以訪問外部變量的,所以很多情況下,我們並不需要傳參數。如:jQuery的window實參,如果不傳入。內部也是可以直接使用的。
2、通常你不應該給立即執行函數傳遞太多的函數,因為它很快會成為一個負擔——為了理解代碼是如何工作的,你不得不經常上下滾動源代碼。
三、立即執行函數的返回值
像其它任何函數一樣,一個立即執行函數也能返回值並且可以復制給其它變量,例如
var result = (function () {
return 2 + 2;
}()); 


var result = (function () {
return 2 + 2;
})();

四、立即執行函數的好處
1、立即執行函數模式被廣泛使用,它可以幫你封裝大量的工作而不會在背后遺留任何全局變量。
2、定義的所有變量都會成員立即執行函數的局部變量,所以你不用擔心這些臨時變量會污染全局空間。
3、這種模式經常被使用在書簽工具(bookmarklets)中,因為書簽工具在任何頁面上運行並且保持全局命名空間干凈是非常必要的;
4、這種模式也可以讓你將獨立的功能封裝在自包含模塊中。
5、可以將這些代碼封裝進一個立即執行函數中,並且確保頁面沒有它的情況下也能正常工作。
6、可以添加更多的加強模塊,移除它們,單獨測試它們,允許用戶去禁用它們等等。
五、注意點
立即執行函數通常作為一個單獨模塊使用。一般沒有問題,但是,建議在自己寫的立即執行函數前加分號,這樣可以有效地與前面代碼進行隔離。否則,可能出現意想不到的錯誤。
例如


var c = 12

var d = c

(function () { var e = 14; }())

會報這樣一個錯誤: