转载:http://www.nowamagic.net/librarys/veda/detail/1673
关于变量,有一个重要的知识点。变量相对于简单属性来说,变量有一个特性(attribute):{DontDelete},这个特性的含义就是不能用delete操作符直接删除变量属性。
1 | a = 10; |
2 | alert(window.a); // 10 |
3 | alert( delete a); // true |
4 | alert(window.a); // undefined |
5 | |
6 | var b = 20; |
7 | alert(window.b); // 20 |
8 | alert( delete b); // false |
9 | alert(window.b); // still 20 |
但是这个规则在有个上下文里不起走样,那就是eval上下文,变量没有{DontDelete}特性。
1 | eval( 'var a = 10;' ); |
2 | alert(window.a); // 10 |
3 | alert( delete a); // true |
4 | alert(window.a); // undefined |
使用一些调试工具(例如:Firebug)的控制台测试该实例时,请注意,Firebug同样是使用eval来执行控制台里你的代码。因此,变量属性同样没有{DontDelete}特性,可以被删除。