2015-07-03 143 views
3

如何通过参数传递命名函数而不调用它。在Javascript中传递命名函数

现在我唯一的解决方案看起来像一个黑客,但它是通过一个未命名的函数,将调用命名函数。

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

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

+1

我想'回调(foo.bind(PARAMS))'会做的工作。 –

回答

2

,你现在所拥有的代码,它封装在另一个匿名函数调用的是完全正常的,而且是在Javascript中广泛使用的模式。

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

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

bind() documentation

+0

我真的很喜欢这个绑定。它看起来直观而优雅。尽管我担心我的代码可能不太容易理解,或者我并不完全了解后台发生了什么。 从我理解的绑定将只创建一个匿名函数,并将“目标绑定函数”的主体复制粘贴到新的匿名函数。是对的吗?是否有使用bind()的注意事项? –

3

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

你也可以做

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

这是一个演示:http://plnkr.co/edit/RLsp99itBG8PTEbyjZ7A?p=preview –

0

你也可以通过功能和使用JavaScript在那里回调定义为apply/call功能

callback(myFunc); 

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

有关更多详细信息,您可以进入Apply方法d文档中的编号Here

0

您的函数应该被分配给一个作用域变量。你可以用这个变量传入它。

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

如果你只是想直接调用foo,只是把它传递。

callback(foo); 
相关问题