我正在使用 Node.js。
在我的“sum”函数被删除后,我希望 typeof(sum) 返回“undefined”,但事实并非如此。
// functions are data in Javascript
var sum = function ( a,b ) { return a + b; }
var add = sum;
delete sum;
console.log ( typeof sum ); // should return undefined
console.log ( typeof add ); // should return function
console.log ( add( 1,2 ) ); // should return 3
我认为它应该返回:
undefined
function
3
但它返回的是:
function
function
3
你不应该使用delete
标识符上的运算符(在范围变量、函数中 - assum
- 或函数参数)。
目的delete
运算符是删除对象属性.
当您声明变量、函数声明或函数参数时,这些标识符在幕后实际上是属于环境记录 http://es5.github.com/#x10.5声明它们的当前范围。
这些属性在内部明确定义为不可配置,它们无法被删除。此外,使用delete
运算符被如此误解,以至于在 ES5 严格模式下,它在标识符上的使用已被完全禁止,delete sum;
应该抛出一个ReferenceError
.
Edit:
正如@SLacks 在问题评论中指出的那样,delete
运算符确实可以使用 Firebug 控制台中的标识符,这是因为 Firebug 使用eval
执行您在控制台中输入的代码,以及在执行的代码中实例化的标识符的变量环境绑定eval
, are mutable,这意味着它们可以被删除,这可能是为了允许程序员在运行时删除用 eval 动态声明的变量,例如:
eval('var sum = function () {}');
typeof sum; // "function"
delete sum; // true
typeof sum; // "undefined"
您也可以在控制台上看到这是如何发生的:
这可能就是您正在阅读的书所发生的情况,作者在基于以下内容的控制台上进行了测试eval
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)