我检查了有关同一问题的问题和答案,但没有一个回答我的问题,所以请不要丢弃我的问题。
当“i”被声明为 let 变量时,对于每次迭代,JS 都会创建一个新的“i”绑定,因此 SetTimout 的每个函数在其闭包内都有自己的“i”(与“i”的情况相反)被声明为 var 变量,其中所有 SetTimout 函数在其闭包中共享相同的绑定)。问题是:如果 JS 在使用 let 时在 for 循环的每次迭代中创建一个新的“i”绑定,那么增量值如何传输到 i 的新绑定?
i 的新绑定如何用 i 的当前值实例化?
我们是否真的在不同范围内有两个具有不同值的 i 绑定(如果是),这些范围是什么?
提前致谢
function a() {
for (let i = 0; i < 3; i++) {
setTimeout(function () { console.log(i) }, i * 1000);
}
}
a();Run Code Online (Sandbox Code Playgroud)