作为参数传递时,函数不起作用

时间:2017-11-03 03:56:10

标签: javascript node.js

我的代码如下:

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。为什么会这样?

1 个答案:

答案 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);