1. 程式人生 > >js立即執行函數

js立即執行函數

立即執行 family 信息 query 告訴 代碼 命名 error 代碼塊

一、立即執行函數方式

js立即執行函數可以讓你的函數在創建後立即執行,可以讓你的函數在定義後立即被執行,這種模式本質上就是函數表達式(命名的或者匿名的),在創建後立即執行。

方式1、最前最後加括號

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

方式2、function外面加括號

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

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

!function(){alert(1);}(); void function(){alert(2);}();

錯誤方式1:

function(){ /* code */ }(); //
SyntaxError: Unexpected token (

因為在解析器解析全局的function或者function內部function關鍵字的時候,默認是認為function聲明,而不是function表達式,如果你不顯示告訴編譯器,它默認會聲明成一個缺少名字的function,並且拋出一個語法錯誤信息,因為function聲明需要一個名字。

錯誤方式2:

但是如果你在括弧()裏傳入一個表達式,將不會有異常拋出
// 但是foo函數依然不會執行

function foo(){ /* code */ }( 1 );

// 因為它完全等價於下面這個代碼,一個function聲明後面,又聲明了一個毫無關系的表達式:

function foo(){ /* code */ }
( 1 );

二、立即執行函數的參數

1)可以給立即執行函數傳遞參數,例如

(function(who, where) {

 console.log("I am" + who + " come from" + where);

} ("Amy", "China"));

註:通常你不應該給立即執行函數傳遞太多的函數,因為它很快會成為一個負擔——為了理解代碼是如何工作的,你不得不經常上下滾動源代碼。

2)有時我們會看到傳入的參數是window, jQuery

為什麽要傳入jquery

jQuery 被應用在成千上萬的 JavaScript 程序中,必須確保 jQuery 創建的變量不能和導入他的程序所使用的變量發生沖突。

為什麽要傳入window

通過傳入 window 變量,使得 window 由全局變量變為局部變量,當在 jQuery 代碼塊中訪問 window 時,不需要將作用域鏈回退到頂層作用域,這樣可以更快的訪問 window;這還不是關鍵所在,更重要的是,將 window 作為參數傳入,可以在壓縮代碼時進行優化

js立即執行函數