2015-07-03 140 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); 
相關問題