我不太了解代码中发生了什么,为什么只打印值1。
for (let i = 0; i < 2; i++) {
setTimeout(() => console.log(i));
i++;
}
答案 0 :(得分:1)
let
在for
循环中的工作方式是,对于每次循环迭代,都会创建一个单独变量;这主要是因为像您这样的循环闭包比以前更简单。因此请记住:
i = 0
开始。 0 < 2
开始,第一个循环主体使用i
的副本执行。i
的副本。i
递增i++;
,并在循环主体的末尾。现在,i
的副本的值为1
。for
循环的增量部分后,在给定第一个(i
)值的情况下,创建一个 second 1
,并然后增加。因此,第二个i
的值为2
。2 < 2
为假,因此循环停止。i
(1
)的值。这与使用var
而不是let
时代码的行为有根本不同,这是let
如此方便的原因之一。
答案 1 :(得分:0)
这是因为setTimeOut
方法在循环结束后运行。在您的情况下,您将在循环中再次增加该值,因此,在此之后,let范围给出i
的值,即现在的1
。
改为执行以下操作:
for (let i = 0; i < 2; i++) {
setTimeout(() => console.log(i));
}