使用delete运算符删除变量

时间:2014-02-07 03:45:29

标签: javascript

为什么无法删除函数内部的函数并且可以删除函数外部?

(function myFunc(){
var colors = ['red','green','blue'];
console.log(delete colors);//cannot be deleted, returns false
})();
console.log(delete colors);// can be deleted, returns true

另一个问题:

假设有colors - 变量在不同的函数中定义,如下所示 -

(function myFunc(){
var colors = ['red','green','blue'];
})();
(function nextFunc(){
var colors = ['one','two','three'];
})();

如何只删除myFunc的变量?

我试过console.log(删除myFunc.colors);但似乎错了!

4 个答案:

答案 0 :(得分:2)

多数民众赞成因为,delete运算符返回一个布尔值。如果它为true或者取决于对象后是否存在,而不是删除是否成功。这意味着如果你试图删除一些从未存在过的东西,delete将返回true首先。

(function myFunc(){
var colors = ['red','green','blue'];
console.log(delete colors);//cannot be deleted, returns false
})();
console.log(delete none_existing_object); //RETURNS true

已添加::

delete仅在不能删除属性时返回false。所以在所有其他情况下它返回true

答案 1 :(得分:0)

因为变量的范围是你的功能。外部功能不存在简单。 第二个问题与第一个问题相似 - 变量在函数外部不存在,因为它是在函数内部声明的。

查看此代码http://jsfiddle.net/nizamabreu/MfDJz/

//Return True
alert(delete colors);// can be deleted, returns true

// Return false
function myFunc(){
var colors = ['red','green','blue'];
   alert(delete colors);//cannot be deleted, returns false
 }
 myFunc();

 //Return True
 alert(delete colors);// can be deleted, returns true

如果我尝试删除不存在的变量,js将返回true。

答案 2 :(得分:0)

在尝试删除声明的变量的情况下,您不能这样做,因为它们被创建为不可删除的。因此,尝试这样做会返回false,因为该属性未被删除。

你在哪里:

(function myFunc(){
var colors = ['red','green','blue'];
console.log(delete colors);//cannot be deleted, returns false
})();

console.log(delete colors);// can be deleted, returns true

然后在第二个 delete 语句中,范围内没有变量 colors 并尝试删除未解析为类型引用或不可解析的标识符引用返回 true ECMA-262 §11.4.1

  

如何只删除myFunc的变量?

你不能(见上文)。

答案 3 :(得分:0)

您无法删除变量。但你可以删除一个属性。请参阅下面的示例。

(function myFunc(){
  var colors = ['red','green','blue'];
  var emp = {
     name : 'Jagadeesh',
     id : 100
  }
  console.log(delete colors);//cannot be deleted, return`enter code here`s false
  console.log(delete emp.name);//can be deleted, returns true
})();

这里我创建了一个带有属性名称和id的JSON \ temp。如果我删除emp.name,它给出了true。运行上面的例子。你将能够理解它。另一件事是你试图删除未定义的函数外的变量。所以你变得真实。您无法访问函数范围之外的变量。测试你可以console.log(颜色)。它将显示错误说未定义。您需要了解变量范围。在这里查看。 http://dailyjs.com/2012/07/23/js101-scope/