为什么在当前范围内Javascript中声明的变量不可配置?

时间:2018-08-12 09:34:16

标签: javascript ecmascript-6 hoisting

我用关键字 var 创建了变量 x ,但是当我执行以下操作时:

var x = 10;
delete x;

它返回 false 。基本上,我不想删除x变量,但是我的问题是,为什么javascript不允许配置在当前作用域上下文中声明的变量。 this documentation中也提到了这一点,但问题是为什么

2 个答案:

答案 0 :(得分:2)

因为否则每个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
  }

答案 1 :(得分:0)

如果在首次使用时声明了变量(使用var x;),则无法删除该变量。 但是,如果您的变量x首次出现在脚本中而没有声明,

如果不使用var关键字,则可以删除变量。

enter image description here

您可以从此资源中获取更多信息 http://www.javascripter.net/faq/deleteavariable.htm