javascript - const 变量可以在 while 循环中重新声明,即使它应该是常量
问题描述
我对 JavaScript 还很陌生,并且遇到了我不太了解的情况:看看这段代码:
let i = 0;
while (i < 4) {
const test = i;
console.log(test);
i++;
}
结果,控制台会打印出如下内容:
0、1、2、3。我认为与 var 关键字相反,不能重新声明带有 const 关键字的变量,但每次循环重新启动时,测试变量仍会再次声明(不仅更新,而且声明全新)。这怎么可能?我认为它与执行上下文或范围有关,实际上我的测试变量应该限定为块(while-loop),但它仍然可以在每次循环时重新分配。
解决方案
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
但是再次运行整个块并为在块内声明一次的变量创建另一个绑定并没有错,就像上面的代码片段一样。
推荐阅读
- node.js - ReferenceError:未定义请求
- javascript - 如何使用 reduce 函数 javascript 对对象进行分组
- python - does tensorflow-gpu library automatically run tensorflow code (non GPU) on GPU?
- php - Yii2:添加 SSL 证书时的会话缓存问题
- python - 在循环中添加到列表
- c++ - QWidget scroll bar for QPainter
- c++ - C++, time since epoch using boost and std::chrono? Why is the Boost version 10 times slower?
- laravel - Understanding syntax of Storage filesystem in Laravel 5.6
- angular6 - 以角度 6 解码 html 实体
- javascript - 如何将本地存储添加到我的项目中?