关于本书Definitive JavaScript Developer guideline中让循环中的声明,代码:
var funcs = [];
for (let i = 0; i < 10; i++) {
funcs.push(function() {
console.log(i);
});
}
funcs.forEach(function(func) {
func(); // outputs 0, then 1, then 2, up to 9
})
它说:
let声明每次循环都会创建一个新变量,因此在循环内创建的每个函数都会获得自己的副本。 i的每个副本都具有在创建它的循环迭代开始时分配的值。
我想知道,在调用函数func()
时,它如何以及在何处找到i
数组中每个元素的funcs
值。 funcs
中的所有元素都相同
ƒ () {
console.log(i);
}
有人可以说明在上面的代码中调用函数时每个步骤是如何发生的吗? (我有点理解,如果使用var
而不是let
,则全局变量i
是每个调用找到的内容。)