在Javascript中传递命名函数

在Javascript中传递命名函数,javascript,jquery,jquery-callback,asynchronous-javascript,Javascript,Jquery,Jquery Callback,Asynchronous Javascript,如何传递带参数的命名函数而不调用它 目前,我唯一的解决方案似乎是一个黑客,但它是传递一个未命名的函数,该函数将调用命名函数 callback(function(){foo(params);}) 有更好的方法吗?没有,有几种方法,但你的方法最受欢迎。我知道这感觉很不舒服,但事实就是这样 你也可以这样做 callback(foo.bind(this, params)); 您现在拥有的代码将调用封装在另一个匿名函数中,非常好,并且是Javascript中广泛使用的模式 如果希望删除匿名函数,可以使

如何传递带参数的命名函数而不调用它

目前,我唯一的解决方案似乎是一个黑客,但它是传递一个未命名的函数,该函数将调用命名函数

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

有更好的方法吗?

没有,有几种方法,但你的方法最受欢迎。我知道这感觉很不舒服,但事实就是这样

你也可以这样做

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

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

如果希望删除匿名函数,可以使用
bind()
方法引用该函数。试试这个:

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

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

callback(myFunc);
其中回调定义为:

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

有关更多详细信息,请参阅MDN中的Apply method文档。您的函数应分配给一个作用域变量。您可以将其与该变量一起传递

var func = function(){ foo(params); }
callback(func);
如果你只是想直接给foo打电话,就把它传过去

callback(foo);

我认为
callback(foo.bind(params))
可以完成这项工作。我似乎真的很喜欢这个绑定。它看起来直观而优雅。尽管我担心我的代码可能不太容易理解,或者我没有完全理解背景中发生的事情。据我所知,bind将创建一个匿名函数,并将“目标绑定函数”的主体复制粘贴到新的匿名函数中。是这样吗?使用bind()有什么注意事项吗?