能够删除非var变量,但不能删除var声明的变量吗?

时间:2013-02-27 04:24:55

标签: javascript variables

例如:这里我用var声明一个变量,然后尝试删除它并失败。

var derp = "foo";        
\> "foo"    
derp;    
\> "foo"    
this.derp;    
\> "foo"    
delete derp;    
\> false    
derp;    
\> "foo"   

但是,如果我创建一个没有var的变量,那么我就能成功删除它。

perd = "boo";    
\> "boo"    
this.perd;    
\> "boo"    
delete perd;    
\> true    
perd;    
\> undefined  

有人可以为我解释这种行为吗?我确信有一些原因。

1 个答案:

答案 0 :(得分:7)

delete运算符不会删除变量。它只从对象中删除属性。

当您使用裸标识符而不使用var关键字声明它时,它不是变量,而是全局变量的属性(通常是浏览器中的window)。这就是你可以删除它的原因。

有关delete运算符的详细信息,请参阅here