设置一个回调数组并尝试在回调中使用数组索引作为值

时间:2011-01-23 01:31:41

标签: javascript callback function-pointers

当我以这种方式设置一个回调数组时,我在对话窗口中得到20个所有回调。我想在数组中获取索引。这可能吗?调用回调的函数期望回调具有一个参数。我不控制回调的调用者,因为它是外部库的一部分。任何帮助表示赞赏。

for (var i = 0; i < 20; i++) {
  callbackDB[i] = function(data) {
    alert(i);
  }
}

2 个答案:

答案 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();

在这种情况下将需要调用该函数(在示例中它被称为“回调”)