gpt4 book ai didi

javascript - 如何在函数中引用自身而不考虑外部变量的变化?

转载 作者:行者123 更新时间:2023-11-30 23:58:54 24 4
gpt4 key购买 nike

我有一个函数,其中定义了其他函数:

var A = function(n) {
console.log(n + A.num());
}
A.num = function() {
return 5;
}

我想将名称更改为 B 并删除 A:

var B = A;
A = undefined;

但是,当我执行 B() 时,它会抛出错误:“无法读取未定义的属性'num'”,这是完全正常的和预期的。

我该如何处理这个问题?

PS:任何认为将 A.num() 更改为 this.num() 的人,不会起作用

最佳答案

您始终可以使用其显式名称(如果有)来引用当前函数。

因此,更改定义,命名该函数,并使用它来引用它:

var A = function currentFunction(n) {
console.log(n + currentFunction.num());
}
A.num = function() {
return 5;
}

var B = A;
A = undefined;
B(10); //15

console.log(typeof currentFunction) //undefined, function name is local

Note: the abovementioned approach won't work if the function is named implicitly, but will continue to work if the function is renamed via fn.name

<小时/>

或者,如果函数不是箭头函数,您也可以使用 arguments.callee,它甚至可以与匿名函数一起使用,但不建议使用它:

var A = function (n) {
console.log(n + arguments.callee.num());
}
A.num = function() {
return 5;
}

var B = A;
A = undefined;
B(10); //15

不幸的是,以上都不适用于箭头函数,如果您想引用自身,请改用命名绑定(bind)函数表达式。

关于javascript - 如何在函数中引用自身而不考虑外部变量的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60876579/

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