gpt4 book ai didi

javascript - 为什么 JavaScript 中命名函数内的函数名称不再引用函数本身?

转载 作者:行者123 更新时间:2023-11-28 13:36:35 26 4
gpt4 key购买 nike

考虑以下命名函数:

function f() {
return f.apply(this, arguments);
}

如果你正常调用这个函数,就会像预期的那样导致堆栈溢出。不是很有趣。那么让我们施展一些魔法:

var g = f, f = alert;

现在,如果您调用f,它只会警告第一个参数。但是,如果您调用g,它仍然会警告第一个参数。发生了什么?调用 g 不应该导致堆栈溢出吗?

我的理解是,在函数 f (现在是 g)内部,变量 f 不再绑定(bind)到 f。它成为一个自由变量。因此,在 f 内部,变量 f 现在指向 alert

为什么会发生这种情况?我希望命名函数内的函数名称始终引用函数本身。我没有提示。实际上非常酷。我只是好奇。

最佳答案

当你这样做时:

var g = f

这实际上与:

var g = function () {
return f.apply(this, arguments);
}

但是,由于您重新分配了 f,它不再指向原始函数,而是指向 alert。看起来它正在按设计工作。

关于javascript - 为什么 JavaScript 中命名函数内的函数名称不再引用函数本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20942044/

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