我只是想了解Javascript中的閉包。我在三個例子中遇到了。
Expample 1:理解閉包,爲每個迭代創建不同的範圍
for (var i = 0; i <= 10; i++) {
setTimeout(function() {
console.log("i :" + i)
}, i * 1000);
}
,並如預期的那樣輸出它打印的「i:11」到控制檯11倍,因爲對整個循環只創建一個範圍是全球範圍內要在每次迭代中使用不同的範圍,我使用了IIFE(立即調用函數表達式),請參閱下面的代碼片段。
例如:於:2-
for (var i = 0; i <= 10; i++) {
(function(i) {
setTimeout(function() {
console.log("i : " + i)
}, i * 1000)
})(i);
}
它從 「0 I」 打印 「我:10」 作爲預期的,因爲是針對每次迭代創建不同範圍。
我無法理解下面的代碼段中究竟發生了什麼。
例如:3
for (let i = 0; i <= 10; i++) {
setTimeout(function() {
console.log("i :" + i)
}, i * 1000);
}
它輸出從 「我:0」 到 「I:10」。
1.我不能理解爲什麼輸出不像第一個例子那樣相同,即打印「1:11」11次?
2。如果我使用塊範圍,是否爲每次迭代創建了不同的作用域?
3。如果創建的範圍不同,那麼它與示例1有什麼不同?