立即執行函式就是在宣告乙個匿名函式時,立即呼叫這個函式。格式一共有三種寫法,舉個栗子:
//第一種格式:(function(a,b)(15,23));
//第二種格式
(function(a,b))(5,12);
//第三種格式(不常用)
+function(a,b)(9,10)
立即執行函式會建立乙個獨立的作用域,讓外部無法訪問作用域內部的變數,從而避免變數汙染。並且該函式只會執行一次,執行後自動被垃圾**。
舉個栗子:經典面試題——如何讓下面這段**輸出0-5
for(var i = 0; i < 6; i++),1000)}
我們可以使用立即執行函式來解決這個問題
for(var i = 0; i < 6; i++))(i),1000)}
上面的**之所以輸出的結果是0到5,而不是6個6,是因為我們每次都將for迴圈中的i單獨賦值給了for迴圈內部的i。 每一次for迴圈內i值變化的時候,我們都立即執行函式在for迴圈內部建立了乙個獨立的作用域,所以最終輸出的結果是0到5。
1、立即執行函式模式被廣泛使用,它可以幫你封裝大量的工作而不會在背後遺留任何全域性變數。
2、定義的所有變數都會成員立即執行函式的區域性變數,所以你不用擔心這些臨時變數會汙染全域性空間。
3、這種模式經常被使用在書籤工具(bookmarklets)中,因為書籤工具在任何頁面上執行並且保持全域性命名空間乾淨是非常必要的;
4、這種模式也可以讓你將獨立的功能封裝在自包含模組中。
5、可以將這些**封裝進乙個立即執行函式中,並且確保頁面沒有它的情況下也能正常工作。
6、可以新增更多的加強模組,移除它們,單獨測試它們,允許使用者去禁用它們等等。
立即執行函式和閉包沒有關係,雖然兩者會經常結合在一起使用,但兩者有本質的不同:
立即執行函式只是函式的一種呼叫方式,只是宣告完之後立即執行,這類函式一般都只是呼叫一次(可用於單例物件上),呼叫完之後會立即銷毀,不會占用記憶體。
閉包則主要是讓外部函式可以訪問內部函式的作用域,也減少了全域性變數的使用,保證了內部變數的安全,但因被引用的內部變數不能被銷毀,增大了記憶體消耗,使用不當易造成記憶體洩露。
let single = (function () ,getage: function ()
}})();
console.log(single.getname()); //小明
console.log(single.getage()); //20
給物件建立了私有變數name、age又對外提供了獲取的方法,典型的自執行函式和閉包結合使用的示例
1、**在頁面載入完成之後,不得不執行一些設定工作,比如時間處理器,建立物件等等。
2、所有的這些動作只需要執行一次,比如只需要顯示乙個事件。
3、將**包裹在它的區域性作用域中,不會讓任何變數洩漏成全域性變數。
請寫出下面的**執行後會輸出什麼?
var a=1;(function a())();
console.log(a);
js立即執行函式
void function func function param function param param function function function 這些可能在平時寫一些普通指令碼的時候不會用,也不常見,但是當你看別人的原始碼的時候就會發現,特別是一些js的外掛程式時候,是很常見的,初...
js 立即執行函式
先來兩種常見的格式吧 function 形參列表 實參列表 function 形參列表 實參列表 以上兩種都是常見的立即執行函式的形式。那麼,這樣寫的原因是什麼?我們只能這麼去寫嘛?原因是有的,當然也還有別的寫法 立即執行函式其實有這樣的規則 函式表示式 這個括號叫做執行符號。函式宣告包括函式定義和...
js 立即執行函式
立即執行函式其實就是函式的呼叫。形如 function function 要理解函式表示式 函式宣告 以及匿名函式 函式宣告function funname 函式表示式var funname function 呼叫函式的方式都為funname 需要用函式名進行呼叫。匿名函式 function 是沒有...