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



我对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

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

最新更新