首页 > 解决方案 > const 变量可以在 while 循环中重新声明,即使它应该是常量

问题描述

我对 JavaScript 还很陌生,并且遇到了我不太了解的情况:看看这段代码:

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

结果,控制台会打印出如下内容:

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

标签: javascriptvariableswhile-loopscopeconstants

解决方案


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在给定的 block 调用中, aconst不能被重新分配。

const同样let不能在给定的 block 调用中重新声明,例如:

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

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


推荐阅读