js匿名自執行函式

2022-09-02 15:27:16 字數 1679 閱讀 6226

匿名自執行函式:沒有方法名的函式

閉包:閉包是指有權訪問另乙個函式作用域變數的函式;

通過乙個例項來解釋:

從網上找到了乙個案例,使用了for迴圈、匿名自執行函式、settimeout。

案例1:

var value1 =0,value2=0,value3=0;

for(var i =1;i<=2;i++),1);

})();

}settimeout(function(),100)

//輸出結果

i2==> 1

i3==> 1

i2==> 2

i3==> 2

i==> 3

i2==> 2

i3==> 1

i==> 3

i2==> 2

i3==> 264

3

1.匿名自執行函式的幾種語法
(function ()  ()); // 推薦

(function () )();

~function () ();

+function () ();

!function () ();

void

function () ();

2.利用自執行函式和閉包來儲存某個特殊狀態中的值
(function(),1);

})();

自執行函式中的變數會在閉包中呼叫,根據閉包的特性會將for迴圈時每次迴圈的不同值傳入閉包;

3.for迴圈語法理解

for (語句 1; 語句 2; 語句 3)
語句 1 在迴圈(**塊)開始前執行

語句 2 定義執行迴圈(**塊)的條件

語句 3 在迴圈(**塊)已被執行之後執行

通過下面案例進行解析:

for(var i=1;i<3;i++),100);

}//輸出12

i===> 3

i===> 3

for迴圈的時候,i++會在for語句中**結束後執行,而settimeout是非同步執行的,因此在settimeout中輸出的i實際上是最後一次迴圈結束後,i再次++後的值。

解釋案例1:

看到這裡大家應該明白了,案例一中,第一次迴圈時,i2 = 1,自執行函式中i3=1,但是閉包可以儲存不同狀態的值,因此,此時傳給settimeout的值只有i3被儲存在快取中,i2,i都將被第二次的迴圈覆蓋,此時settimeout並沒有執行;

當第二次迴圈時,i2=2;i3=2;同樣,i3=2也被儲存在閉包中,i2被覆蓋;

此時for迴圈執行結束,開始執行settimeout函式,這個時候,for迴圈結束了,並且執行了最後乙個語句「i++」,因此,此時為3,並非2;而閉包外面的i2並沒有將不同的狀態儲存在閉包中,只能被覆蓋,而閉包中的i3每次的值都會被閉包快取在記憶體中,將狀態保留下來,因此settimeout中的都為3,i2都為2,而i3則是每次迴圈的值;

文末福利:

JS匿名函式自執行函式

js匿名函式自執行函式 function function 這是乙個函式,函式後面接 則是呼叫函式 比如 function arg 4 則輸出4 好處 放在裡面,不會汙染外面的變數,也保護了自己,外面呼叫不了裡面的函式和變數。在js中寫大量 可以防止變數衝突和錯誤呼叫。外掛程式常用的是 functi...

JS 關於自執行的匿名函式

1.什麼是自執行的匿名函式?它是指形如這樣的函式 function 2.疑問 為什麼 function 可以被執行,而function 卻會報錯?3.分析 1 首先,要清楚兩者的區別 function 是表示式,function 是函式宣告.2 其次,js 預編譯 的特點 js在 預編譯 階段,會解...

js匿名函式自執行的好處

我們知道,在建立乙個函式時如果要用到變數來訪問資訊的話,要盡量使用區域性變數。因為一方面區域性變數會隨著函式的執行結束被銷毀 另一方面在不執行函式的時候也不會建立這個區域性變數,對節省空間資源有很大的好處。下面我們來看乙個案例 var num 1 全域性變數num function a functi...