gpt4 book ai didi

javascript - 为什么我删除的函数在 Node.js 中不是 typeof "undefined"?

转载 作者:数据小太阳 更新时间:2023-10-29 05:40:50 25 4
gpt4 key购买 nike

我正在使用 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 运算符(在范围变量、函数中 - 作为 sum - 或函数参数)。

delete 运算符的目的是删除对象属性

当您声明变量、函数声明或函数参数时,在幕后这些标识符实际上是属于 environment record 的属性。声明它们的当前范围。

这些属性在内部明确定义为不可配置,它们不能被删除。此外,delete 运算符的用法一直被误解,以至于在 ES5 严格模式下,它在标识符上的使用已被完全禁止,delete sum; 应该抛出一个 引用错误

编辑:

正如@SLacks 在问题评论中指出的那样,delete 运算符确实使用来自 Firebug 控制台的标识符,这是因为 Firebug 使用 eval 来执行您输入的代码在控制台中,eval执行的代码中实例化的标识符的可变环境绑定(bind)是可变的,这意味着它们可以被删除,这可能是为了让程序员在运行时使用 eval 删除动态声明的变量,例如:

eval('var sum = function () {}');
typeof sum; // "function"
delete sum; // true
typeof sum; // "undefined"

您也可以在控制台上看到这是如何发生的:

firebug-eval-code

这可能就是您正在阅读的书中发生的情况,作者在基于 eval 的控制台上进行了测试。

关于javascript - 为什么我删除的函数在 Node.js 中不是 typeof "undefined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7624250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com