let、 var、 settimeout,一點思考。
for(var i = 0; i < 10; i++),100);
}
1
2 3
4 5
結果是很顯而易見的,10次都是10,在面試前端的閉包知識時候很常見。
用上let之後,
for(let i = 0; i < 10; i++),100);
}
1
2 3
4 5
結果是:
0、1、2、3、4、5、6、7、8、9
為什麼var和let宣告的i,得到不同的結果?
var宣告的i,作用域不僅僅在for迴圈內,還在for迴圈的外部。
當settimeout執行的時候,for迴圈已經完成,i此時的值是10,我們稍微調整一下**:
for(var i = 0; i
< 10; i++),100);
}function
consolelog()1
2345
678
結果是10次10。
for(var i = 0; i
< 10; i++)
1
和
var i;
for(i = 0; i
< 10; i++)
1
2 等價。
但是在let宣告的時候則不一樣,
for(let i = 0; i
< 10; i++)
1
和
let i;
for(i = 0; i
< 10; i++)
1
2 是不等價的,因為let宣告只在**塊中有效。
但是,如果僅僅這樣,我們或許很容易理解
for(var i = 0; i < 10; i++),100);
}
1
2 3
4 5
得到10次10,然而為什麼
for(let i = 0; i < 10; i++),100);
}
1
2 3
4 5
得到0-9?
在settimeout的時候,匿名函式function()會被宣告建立,當匿名函式執行的時候,會查詢當前執行環境的 i 的值。
var宣告的 i ,執行環境的 i 的值為10,但是let宣告的 i,執行環境中 i 的值是每乙個迴圈建立匿名函式時候的 i。
所以得到了0-9的值。
let替換var,可以很好的解決閉包的問題。
for var let閉包理解
let var settimeout,一點思考。for var i 0 i 10 i 100 結果是很顯而易見的,10次都是10,在面試前端的閉包知識時候很常見。用上let之後,for let i 0 i 10 i 100 結果是 0 1 2 3 4 5 6 7 8 9 為什麼var和let宣告的i...
python閉包怎麼理解 Python 閉包的理解
很多函式型的語言都有閉包這一概念,比如python的兄弟js。人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。下面舉乙個例子 coding utf 8 def foo nums 0 5 for i in range 5 nums i lambd...
javaScript閉包理解
以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...