Javascript i的值是否被复制到下一个词汇环境?I';我很困惑
我不太明白代码中发生了什么,为什么只打印值1Javascript i的值是否被复制到下一个词汇环境?I';我很困惑,javascript,Javascript,我不太明白代码中发生了什么,为什么只打印值1 for(设i=0;iconsole.log(i)); i++; }这是因为setTimeOut方法在循环结束后运行。在本例中,您将在循环中再次递增该值,因此在此之后,let作用域将给出i的值,即1 改为这样做: for(设i=0;iconsole.log(i)); }让在循环的中工作的方式是,对于每个循环迭代,创建一个独立的变量;这主要是因为像您这样的循环中的闭包不像以前那样复杂。因此,请记住: 您可以从i=0开始 由于0
for(设i=0;i<2;i++){
setTimeout(()=>console.log(i));
i++;
}
这是因为setTimeOut
方法在循环结束后运行。在本例中,您将在循环中再次递增该值,因此在此之后,let作用域将给出i
的值,即1
改为这样做:
for(设i=0;i<2;i++){
setTimeout(()=>console.log(i));
}
让在循环的中工作的方式是,对于每个循环迭代,创建一个独立的变量;这主要是因为像您这样的循环中的闭包不像以前那样复杂。因此,请记住:
i=0
开始李>
0<2
,第一个循环体使用i
的副本执行i
的副本i++递增i
代码>位于循环体的末尾。现在,i
的副本具有值1
for
循环的增量部分完成时,将创建一个第二个i
,给定第一个(1
)的值,然后递增。因此第二个i
的值为2
2<2
为false,因此循环停止i
(1
)的值这与使用
var
而不是let
时代码的行为方式有根本不同,这也是let
如此方便的原因之一。如果有人在控制台中尝试此操作,您可能会在控制台中看到0
和1
,但请记住,0
不会被记录,它是返回值。实际上只记录了1
。非常感谢,这真的很有帮助。