2012-12-21 226 views
2


我們可以給參數回調嗎?

function abc(arg1,arg2, callback){ 
     console.log(arg1 + arg2) // I am doing something really interesting 
     if(callback){ 
     callback(arg1+ arg2) 
     } 
    } 
    function add(){ 
      console.log("from call back " + arguments[0]) 
    } 

    var a =10; 
    abc(1,2, add) 


這工作得很好,但如果我們需要一些額外的參數發送到回調,我們該怎麼辦?
在這裏,除了(arg1+ arg2)我需要一些其他的參數從abc來電設置爲回調
而且,正是abc(1,2,add)abc(1,2,add())之間的區別?
謝謝:)

+2

你想傳遞「一些額外的參數」從回調在哪裏? –

回答

5
  • abc(1,2,add) =>將函數參數賦值爲「函數類型」。這就像給函數的指針以便稍後調用它。

  • abc(1,2,add()) =>調用add()函數並將其返回值作爲參數。

您是否需要支持多於參數的回調?由於JavaScript是一種動態語言,只是調用相同的回調函數有多個參數:

  • callback(1,2,3,4)
  • callback(1,2,3,4,5)
  • callback(1,2,3,4,5,6)

JavaScript對函數簽名並不嚴格:函數具有與調用者一樣多的參數。

例如,如果你像這樣的回調函數:

function(a, b) { 

} 

後來你怎麼稱呼它是這樣的:

function("hello"); // Where's the second argument?? 

的JavaScript不會抱怨。簡單地b將是未定義的。

1

添加和添加()之間的差: 加載是一個函數,並添加()是函數的返回值。 如果你想獲得更多的函數參數。使用參數對象 每個函數都有一個參數對象 參數[0] == 1參數[1] == 2參數[2] == add。

1

您可以從您的原始函數調用的參數回調,你也可以提供你的函數調用中回調的參數:

function f1 (args, callback, params) { 
    callback.apply(this, params); // Params needs to be an array 
    callback.apply(this, [args]); // This would call callback with 1 param - args 
    callback.call(this, args); // This is the same as the line above 
} 

function f2() { 
    for (item in arguments) { 
     console.log(item); 
    } 
} 

f1('arg', f2, [1, 2, 3]); 

如果用裏面的參數的函數調用調用你的函數,那麼它會立即評估,並不會作爲回調執行。

0

abc(1,2,add)abc(1,2,add())之間的區別是,在第二種情況下,它不是abc調用add。結果是add執行的速度比預期的要快得多,沒有任何爭論。

的常用方法額外的參數傳遞給回調是創建一個匿名函數關閉過來的參數:

var a=10; 
var b=20; 
abc(a, b, function(text){ 
    add(a, b); 
    console.log(text); //logs "abc" 
}); 
相關問題