我只是想了解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有什么不同?