Javascript - 向回调函数添加更多参数

时间:2011-08-26 18:57:01

标签: javascript callback asynccallback

我正在调用一个需要回调函数作为参数的异步函数。

以下是javascript代码:

for(i in array) 
{
    var item = array[i];
    functionToCall(item[i][1], 50, function(a, b)
    {
        alert(a + b);
    });
}

我无法编辑functionToCall功能。我想要做的是在回调函数中使用“item”变量,如下所示。

for(i in array) 
{
    var item = array[i];
    functionToCall(item[i][1], 50, function(a, b, c)
    {
        alert(a + b + c);
    }, item);
}

但是这段代码不能正常工作。我不能在函数内部使用“item”,因为它总是使用数组中的最后一项。

那我怎么能这样做呢?

3 个答案:

答案 0 :(得分:4)

你可以在函数中使用item,但是你需要“捕获”它,这样你就不会每次都使用数组的最后一个元素。

for(var i = 0, l = array.length; i < l; ++i) { // better than for .. in
    var item = array[i];
    (function(item, i){
      functionToCall(item[i][1], 50, function(a, b) // do you really re-index item with the same index?
      {
          alert(a + b);
      });
    })(item, i);
}

答案 1 :(得分:0)

使用for..in迭代数组是个坏主意。相反,使用.forEach()和许多问题就会消失:

array.forEach(function(item)
{ 
    functionToCall(item[1], 50, function(a, b) 
    { 
        alert(a + b + item[1]); 
    }); 
}

在旧版浏览器中使用.forEach() see this

答案 2 :(得分:0)

我会尝试这样的事情:

 function createExecutionCall(itemIndex, number, item)
 {
      return function() { functionToCall(itemIndex, number, function(a, b)
      {
           // Example, item should be contained within this closure then
           alert(a + b + item);
      });
 }

 for(i in array) 
 {
     var item = array[i];

     var call = createExecutionCall(item[i][1], 50, item);
     call();
  }