首页 > 解决方案 > 在循环内重新声明块范围的循环变量

问题描述

我最近遇到了一段代码,它让我对在let循环中用关键字声明的块范围变量感到困惑。

考虑以下代码片段:

for (let i = 0; i < 10; i++) {
  let i = 'hello';
  console.log(i);
}

变量的重新声明如何在i这里工作?不过,我不能在同一范围内重新声明块范围的变量。

标签: javascript

解决方案


为什么

for(let fn = () => run; fn();) {
  let run = false;
}

不行?因为每个循环迭代都有自己的范围,那么run声明中将引用哪个范围?为了防止这种情况,声明在它们自己的范围内。因此,您无法从头部的正文中访问变量。这在13.7.4.8中指定。


推荐阅读