2013-04-24 21 views
2

我有一種情況,我正在使用具有綁定功能的包/插件。javascript回調,如何包含附加參數

我用一個代碼來調用bind,該代碼是myevents觸發回調函數時的過濾器。在這個senario中,三個調用將被綁定,一個參數爲't1',第二個爲't2',第三個爲't3'。

當從myevents對象觸發事件時,將使用數據參數調用回調(具體取決於代碼)。

我的問題是當回調函數被調用時,我需要知道最初綁定時的循環索引號。例如,我在alert語句中有i變量,但我不知道如何獲得值,以便在回調最終被觸發時保存。

似乎會有一些「功能(數據,我)」的組合來實現這一點。

bindList = array('t1','t2','t3'); 

for (var i = 0; i < bindList.length; i++) { 
     myevents.bind(bindList[i], function(data) { 
      alert('data arrive on item ' + i + ': ' + data); 
     }); 
    } 

我將不勝感激任何幫助。 謝謝。

回答

5

使用閉包。由於JS變量是「函數作用域」,所以在0處的i在迭代中的任何點處指向相同的i。我們需要爲每次迭代創建一個範圍,以便綁定代碼引用閉包的i而不是循環的i

for (var i = 0; i < bindList.length; i++) { 
    (function(i){ 
    myevents.bind(bindList[i], function(data) { 
     alert('data arrive on item ' + i + ': ' + data); 
    }); 
    }(i)); 
} 
+1

只是一個小的解釋:原代碼'i'指外界變量,因此由當時的回調被執行完成循環,所有的回調將使用相同的值'bindList.length'。 – 2013-04-24 20:44:50

+2

您可以直接將'i'綁定到回調函數... – elclanrs 2013-04-24 20:46:14

+1

謝謝!約瑟夫和沃爾的答案很棒。試過這一個,它的作品。太容易了......太光滑了!謝謝! – Scott 2013-04-24 22:52:54

相關問題