for循环var和let区别

我们写JavaScript for循环的时候,通常都是通过var定义索引值的,这个索引值在循环结束后依然可以访问。

蓝天

而我们如果用let来定义循环的索引值的话,就不会出现这种情况。

for(var i = 0; i < 10; i++) {
  // ...
}
console.log(i); // 10

上述代码中,我们是用var来定义i的,循环结束后访问索引i的值,会输出10,这是最后一次执行i++后的值。

其实这样并不好,因为正常来讲,在for循环中,循环的索引值一般只会在循环体内有效,循环结束后索引值应该被回收才对。

解决办法就是通过let定义索引i,在这种情况下,循环体外访问i就会抛出异常。

for(let i = 0; i < 10; i++) {
  // ...
}
console.log(i); // ReferenceError: i is not defined