Javascript循環(huán)中的事件處理程序-需要閉包嗎?我正在處理一些HTML和Javascript代碼,這些代碼是我從其他人手中接過的。該頁面每10秒重新加載一個數(shù)據(jù)表(通過異步請求),然后使用一些DOM代碼重新構(gòu)建該表。所討論的代碼如下所示:var blah = xmlres.getElementsByTagName('blah');for(var i = 0; i < blah.length; i++) {
var td = document.createElement('td');
var select = document.createElement('select');
select.setAttribute("...", "...");
select.onchange = function() {
onStatusChanged(select, callid, anotherid);
};
td.appendChild(select);}當(dāng)onchange事件的<select>元素,但是,似乎將相同的值傳遞給onStatusChanged()方法為每個<select>在表中(我已經(jīng)驗證過,在循環(huán)的每一次迭代中,callid和anotherid正在被賦予新的、獨特的價值觀)。我懷疑發(fā)生這種情況是因為我如何設(shè)置事件處理程序,并使用select.onchange = function()語法。如果我理解它是如何正確工作的,這個語法將onchange事件的閉包設(shè)置為引用這兩個引用的函數(shù),該函數(shù)的最終值是在循環(huán)的最后一次迭代中設(shè)置的值。當(dāng)事件觸發(fā)時,callid和anotherid是上一次迭代中的值集,而不是單個迭代中的值集。有沒有方法可以復(fù)制要傳遞給的參數(shù)的值?onStatusChanged()?我改變了標(biāo)題,以更好地反映問題和公認(rèn)的答案。
Javascript循環(huán)中的事件處理程序-需要閉包嗎?
慕的地6264312
2019-07-02 11:05:54