匿名自執行函式:沒有方法名的函式通過乙個例項來解釋:閉包:閉包是指有權訪問另乙個函式作用域變數的函式;
從網上找到了乙個案例,使用了for迴圈、匿名自執行函式、settimeout。
案例1:
var value1 =0,value2=0,value3=0;
for(var i =1;i<=2;i++),1);
})();
}settimeout(function(),100)
1.匿名自執行函式的幾種語法//輸出結果
i2==> 1
i3==> 1
i2==> 2
i3==> 2
i==> 3
i2==> 2
i3==> 1
i==> 3
i2==> 2
i3==> 264
3
2.利用自執行函式和閉包來儲存某個特殊狀態中的值(function () ()); // 推薦
(function () )();
~function () ();
+function () ();
!function () ();
void
function () ();
自執行函式中的變數會在閉包中呼叫,根據閉包的特性會將for迴圈時每次迴圈的不同值傳入閉包;(function(),1);
})();
3.for迴圈語法理解
for (語句 1; 語句 2; 語句 3)
語句 1 在迴圈(**塊)開始前執行通過下面案例進行解析:語句 2 定義執行迴圈(**塊)的條件
語句 3 在迴圈(**塊)已被執行之後執行
for迴圈的時候,i++會在for語句中**結束後執行,而settimeout是非同步執行的,因此在settimeout中輸出的i實際上是最後一次迴圈結束後,i再次++後的值。for(var i=1;i<3;i++),100);
}//輸出12
i===> 3
i===> 3
解釋案例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...