2013-12-08 135 views
6

我很難理解如何在不立即調用該函數的情況下將參數正確傳遞給回調函數。Javascript:如何將參數傳遞給回調函數

例如,這將如預期:

var callBack = function() { ... } 
window.setTimeout(callBack, 1000); 

但這一不小心就會調用callBack

var callBack = function(param1, param2) { ... } 
window.setTimeout(callBack('foo','bar'), 1000); 

回答

7

你可以稱它爲如下,

var callBack = function(param1, param2) { ... } 
window.setTimeout(function(){callBack('foo','bar');}, 1000); 
+0

這裏不需要匿名函數 - 它只是使代碼混亂。 settimeout函數支持將參數傳遞給它的回調 - 那麼爲什麼不使用它呢? – Lix

+1

@Lix這兩種方式都可以接受,但是將參數傳遞給回調函數,我認爲在ie中不支持。 – melc

+0

@Lix不過,我很高興這個答案是張貼的,因爲它顯示了一個更通用的解決方案,當函數採取回調並不需要參數的cb。現在只有'bind()'丟失了(需要提及,不是更多):) –

8

方式傳遞參數是在the documentation of settimeout()中所述的時間參數之後。

var timer = window.setTimeout(func, delay, [ param1, param2, ... ] 

第一個參數是實際的回調,第二個是在毫秒的時間和最後一個(可選的)參數是參數數組傳遞到回調。

所以,你的例子會是這樣的:

window.setTimeout(callBack, 1000, [ "foo", "bar" ]); 

你的問題的標題是有些誤導是用來傳遞參數給回調函數的方法是代碼執行的區別使用它。正如你可能想象的那樣,實際的函數對象及其參數不一定需要一起傳遞,因爲函數執行會延遲到稍後的時間;只有這樣,參數才需要與回調聯繫。


有關如何將參數傳遞給回調對象,你可以在這個帖子看看一個更通用的解釋:JavaScript: Passing parameters to a callback function

相關問題