【问题标题】:Setting up a array of callbacks and trying to use array index as value in callback设置回调数组并尝试使用数组索引作为回调中的值
【发布时间】:2011-01-23 01:31:40
【问题描述】:

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

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

【问题讨论】:

    标签: javascript callback function-pointers


    【解决方案1】:

    因为在调用函数时会评估 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 );
    }
    

    【讨论】:

    • 我不得不为 createFunction 使用关键字 function 而不是 var 但否则这就像一个魅力。谢谢!
    • @Xavier:我太草率了。我打算做var createFunction = function( current_i ) {...。声明为function createFunction(... 也很好。
    【解决方案2】:

    使用对象的另一种解决方案。

    var callbackDB = new Array();
    
    for (var i = 0; i < 20; i++) {
      callbackDB[i] = {
        value: i,
        callback: function() {
          alert(this.value);
        }
      };
    }
    			
    callbackDB[5].callback();

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 2014-10-20
      • 1970-01-01
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多