函数作为parameter passing时不起作用

我有这样的代码:

function doStuff(args) { // do stuff globalFunction(foo); } 

我想通过传递全局函数作为参数来重构我的代码,以便如果全局函数更改,我可以只更改传递给我的函数:

 function doStuff(args, fn) { // do stuff fn(foo); } 

但是由于一些奇怪的原因,这个函数的performance现在有所不同,我在其中的某个地方出现了错误。 我甚至做了这个检查,我正确地传递它:

 function doStuff(args, fn) { // do stuff console.log(globalFunction === fn); // true fn(foo); } 

所以我一定知道这是正确的function。 我真的很困惑。 有人能告诉我发生了什么吗?

编辑:这只是越来越怪异。 我现在有这个:

 function doStuff(args) { // do stuff globalFunction(foo); // works const fn = globalFunction; fn(foo); // doesn't work (???) } 

也许这是特定于这个function的东西。 基本上,这个函数是在一个类中的,它在它的正文中提到了这个。 当我正常运行代码时很好,但是当我从指定的variables运行代码时,出现未定义的错误。 我会发布整个代码,但它是一个巨大的外部库的一部分,所以我正在尽我所能来总结它。

编辑2:

我想我已经隔离了这个问题。 如果我有类似的代码

 class foo { a() { console.log(this); } } 

然后const bar = new foo(); bar.a(); const bar = new foo(); bar.a(); loggingfoo 。 但是,如果我做const fn = bar.a然后调用bar.a() ,我得到undefined 。 为什么会发生?

 const fn = bar.a 

创build一个与bar.a的新函数引用。 您可以使用

 fn.call(bar /* args */); 

fn()调用中将其设置为bar

 class foo { a() { console.log(this, ...arguments); } } const bar = new foo(); const fn = bar.a; fn.call(bar, 123);