3

如何在不调用的情况下传递带参数的命名函数。

现在,我唯一的解决方案似乎是一个 hack,但它是传递一个将调用命名函数的未命名函数。

callback(function(){foo(params);})

有没有更好的方法来做到这一点?

4

4 回答 4

3

不,有几种方法可以做到这一点,但你拥有它的方式是最受欢迎的。我知道这感觉很hacky,但就是这样。

你也可以做

callback(foo.bind(this, params));
于 2015-07-03T15:34:01.530 回答
3

您现在拥有的将调用包装在另一个匿名函数中的代码非常好,并且是 Javascript 中广泛使用的模式。

如果你想删除匿名函数,你可以使用对函数的引用和bind()方法。尝试这个:

callback(foo.bind(this, params));

绑定()文档

于 2015-07-03T15:35:09.147 回答
0

您也可以只传递函数并使用 Javascript apply/call函数

callback(myFunc);

其中回调定义为:

function callback(func, params) {
    func.apply(null, params);
}

有关更多详细信息,您可以在此处进入 MDN 中的 Apply 方法文档

于 2015-07-03T15:35:48.507 回答
0

您的函数应分配给范围变量。您可以使用该变量传递它。

var func = function(){ foo(params); }
callback(func);

如果您只是想直接调用 foo,只需将其传入即可。

callback(foo);
于 2015-07-03T15:36:32.970 回答