当我以这种方式设置一个回调数组时,我在对话窗口中得到20个所有回调。我想在数组中获取索引。这可能吗?调用回调的函数期望回调具有一个参数。我不控制回调的调用者,因为它是外部库的一部分。任何帮助表示赞赏。
for (var i = 0; i < 20; i++) {
callbackDB[i] = function(data) {
alert(i);
}
}
答案 0 :(得分:11)
因为在调用函数时会计算i
,所以您需要在新函数执行中将i
的值作为范围,以保留您期望的值。
// returns a function that closes around the `current_i` formal parameter.
var createFunction = function( current_i ) {
return function( data ) {
alert( current_i );
};
};
// In each iteration, call "createFunction", passing the current value of "i"
// A function is returned that references the "i" value you passed in.
for (var i = 0; i < 20; i++) {
callbackDB[i] = createFunction( i );
}
答案 1 :(得分:2)
使用Object的另一种解决方案。
var callbackDB = new Array();
for (var i = 0; i < 20; i++) {
callbackDB[i] = {
value: i,
callback: function() {
alert(this.value);
}
};
}
callbackDB[5].callback();
在这种情况下将需要调用该函数(在示例中它被称为“回调”)