在使用闭包时,循环迭代变量“i”会被绑定到闭包环境中。因此,使用const声明的“i”会在每次循环迭代时重新声明,导致在闭包中访问不到正确的“i”值。
解决这个问题,可以使用立即执行函数表达式(IIFE)来创建一个闭包,并将循环变量作为参数传递给函数。这样,在循环内部创建的闭包仅会捕获函数的参数,而不是绑定到环境中的循环变量。代码示例如下:
for (let i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i);
}
在这个示例中,通过使用IIFE将循环变量“i”作为参数传递给闭包,每个闭包都可以正确地访问它们捕获的参数值。这样,每个闭包中的“i”都是一个完全独立的变量,不会受到循环迭代的影响。
上一篇:闭包中为什么顺序很重要?
下一篇:闭包中无法更改结构实例的值。