我在使用“use strict”时在我的函数中声明了两次变量。我知道这个函数具有全局范围,它的变量也被视为具有窗口范围的全局变量,即 window.car
但是不应该在 let 数据类型的 if 语句中重新声明 speed 和 capacity 变量。 (“let”声明一个 block 作用域局部变量,可选择将其初始化为一个值。)
(function car() {
"use strict";
var speed = 100;
const capacity = '1000CC';
if(speed) {
let speed = 200;
let capacity = '5000CC';
console.log(speed,capacity);
}
console.log(speed,capacity);
})();
请让我知道我在这里缺少什么。
最佳答案
“let”声明一个 block 作用域局部变量。但是仍然可以在局部范围内修改全局变量。
(function car() {
"use strict";
var speed = 100;
const capacity = '1000CC';
if(speed) {
let speed = 200;
let capacity = '5000CC';
console.log(speed,capacity);//inside local it is modified to 200
}
console.log(speed,capacity);//outside scope it pull from global scope to 100
})();
即使在严格模式下,您也可以重新声明/修改全局变量。
只有在同一范围内重新声明同一变量时才会出现错误。请看以下摘自 MDN 的示例
if (x) {
let foo;
let foo; // TypeError thrown.
}
但是函数体没有这个限制! (但它在 ES6 中抛出错误,尽管正如@Bergi 所评论的那样,可能是 MDN 中的文档有误)
function do_something() {
let foo;
let foo; // This works fine.
}
关于javascript - 在 Javascript 中使用 strict 和 let 不按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31114314/