let循环计数器 through和through声明的区别在于var,varcounter 变量在函数中的循环外部可见,通过let- 仅在循环内部可见。请解释为什么在这些情况下会有不同的结论。
for(var i = 0; i < 10; i++) setTimeout(() => console.log(i), 1000)
在这里,我们得到十个。
for(let i = 0; i < 10; i++) setTimeout(() => console.log(i), 1000)
这里从零到十。
对于第一个例子,一切都清楚了,但为什么在第二个例子中会这样呢?i毕竟,它是创建一次并在第一个开始之前滚动setInterval到十个。一句话——为什么这两个例子有不同的结果?
https://learn.javascript.ru/let-const
这都是关于变量的范围。let 语句声明了一个绑定到块作用域的变量。什么是块作用域?这是一个例子
正如你所看到的,在一个块的内部和外部,ES6 创建了完全不同的变量。由 let 语句创建的变量仅在其范围内可见,在其范围外是不可见的,无法访问它。
如果您使用 var 语句尝试相同的操作,会发生以下情况。
如您所见,var 语句并不完全符合块可见性规则。
你能简化你的例子以获得更好的清晰度吗?
1) 可以表示如下
2)并按行分割
但是使用 var 运算符,情况就不同了。
像这样的事情就是javascript的情况。您可以在此处和此处阅读有关块范围的更多信息。