Ehe*_*Tov 5 javascript node.js
我正在使用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
Run Code Online (Sandbox Code Playgroud)
我认为应该回归:
undefined
function
3
Run Code Online (Sandbox Code Playgroud)
但它返回:
function
function
3
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 12
您不应该delete在标识符上使用运算符(在范围变量,函数 - 作为sum- 或函数参数中).
delete运算符的目的是删除对象属性.
当您向变量声明函数声明或函数参数时,在后台这些标识符实际上是属于声明它们的当前作用域的环境记录的属性.
这些属性在内部明确定义为不可配置,不能删除.此外,delete运营商的使用一直是如此误解,以至于在ES5严格模式下,它在标识符上的使用已被完全禁止,delete sum;应抛出ReferenceError.
编辑:
正如@SLacks在问题评论中指出的那样,delete运营商使用Firebug控制台中的标识符,这是因为Firebug用于eval执行您在控制台中输入的代码,并且在执行的代码中实例化的标识符的变量环境绑定eval是可变的,这意味着它们可以删除,这可能是允许程序员在运行时删除动态声明的变量与eval,例如:
eval('var sum = function () {}');
typeof sum; // "function"
delete sum; // true
typeof sum; // "undefined"
Run Code Online (Sandbox Code Playgroud)
你可以在控制台上看到这种情况:

这可能就是你正在阅读的书中发生的事情,作者在一个基于的控制台上进行了测试eval.