const 变量可以在 while 循环中重新声明,即使它应该是常量

const variable can be redeclared inside while loop even though it should be constant

我是 JavaScript 的新手,运行 遇到了一个我不太了解的情况: 看看这段代码:

let i = 0;
while (i < 4) {
  const test = i;
  console.log(test);
  i++;
}

因此控制台会打印出如下内容:

0, 1、 2、 3. 我认为与 var 关键字相反,不能重新声明带有 const 关键字的变量,但每次循环重新启动时,测试变量仍然会再次声明(不仅更新而且声明为全新)。 这怎么可能?我假设它与执行上下文或范围有关,实际上我的测试变量应该限定在块(while 循环)的范围内,但它仍然可以在每次循环时以某种方式重新分配。

const 防止变量被重新分配,例如

const test = i;
test = 10; // this would not be allowed

它不会阻止变量在块再次 运行 时被重新声明,否则几乎不可能做任何事情:

let i = 0;
function foo() {
  const test = i;
  console.log(test);
  i++;
};

foo();
foo(); // nothing wrong with running a function a second time

给定的块可以 运行 与脚本作者指示的次数一样多。 const 的唯一限制是 在块的给定调用中 ,无法重新分配 const

constlet 同样不能在给定的块调用中重新声明 ,例如:

const test = i;
const test = 10; // re-declaration in the same block; forbidden

但是 运行 再次 整个块 并为在块内声明一次的变量创建另一个绑定并没有错,就像上面的代码片段一样。