我用关键字var创建了一个变量x,但是当我执行以下操作时:
var x = 10;
delete x;
返回false。基本上,我不想删除x变量,但是我的问题是,为什么javascript不允许配置在当前作用域上下文中声明的变量。 this documentation中也提到了这一点,但问题是为什么?
最佳答案
因为否则每个x
可能会或可能不会抛出错误,或者可能突然引用另一个变量:
let x = 2;
{
let x = 3;
if(Math.random() > 0.5) delete x;
console.log(x); // ?!
}
这使得代码容易出错且难以预测,并且无法进行优化,每一行都可能突然变成语法错误,这就是为什么无法以这种方式删除变量的原因。
但是,还有另一种方法可以通过将对象添加为可以突变的范围来获得此行为,这就是没人使用
with
语句的原因: const scope = { b: 2 };
with(scope) {
console.log(b); // 2
delete scope.b;
console.log(b); // reference error
}
关于javascript - 为什么在当前作用域内Javascript中声明的变量不可配置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51807557/