我的代码如下:
function doStuff(args) {
// do stuff
globalFunction(foo);
}
我想通过将全局函数作为参数传递来重构我的代码,这样如果全局函数发生更改,我只能更改传递给函数的内容:
function doStuff(args, fn) {
// do stuff
fn(foo);
}
但由于一些奇怪的原因,该函数现在表现不同,我在其中的某个地方出现错误。我甚至这样做是为了仔细检查我是否正确传递了它:
function doStuff(args, fn) {
// do stuff
console.log(globalFunction === fn); // true
fn(foo);
}
所以我肯定知道这是正确的功能。我真的很困惑。有人能让我知道发生了什么吗?
编辑:这只是更奇怪了。我现在有这个:function doStuff(args) {
// do stuff
globalFunction(foo); // works
const fn = globalFunction;
fn(foo); // doesn't work (???)
}
也许它是这个功能特有的东西。基本上,函数在一个类中,它在它的主体中引用了它。当我正常运行代码时它很好,但是当我从指定的变量运行它时,我得到一个错误,这是未定义的。我会发布整个代码,但它是一个巨大的外部库的一部分,所以我尽力总结它。
编辑2:
我想我已经解决了这个问题。如果我有像
这样的代码class foo {
a() {
console.log(this);
}
}
然后const bar = new foo(); bar.a();
记录foo
。但是,如果我执行const fn = bar.a
然后致电bar.a()
,我会获得undefined
。为什么会这样?
答案 0 :(得分:1)
const fn = bar.a
创建一个与bar.a
不同的新函数引用。你可以使用
fn.call(bar /* args */);
在this
电话
bar
设为fn()
class foo {
a() {
console.log(this, ...arguments);
}
}
const bar = new foo();
const fn = bar.a;
fn.call(bar, 123);