JavaScript匿名函数的参数

时间:2010-06-11 15:02:57

标签: javascript loops closures anonymous-function

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, function()
    {
        console.log(somearray[i][0]);
    });
}

如何将somearray或其中一个索引传递给匿名函数? somearray已经在全球范围内,但我仍然得到 somearray [i]未定义

5 个答案:

答案 0 :(得分:31)

匿名函数中的i会捕获变量 i,而不是。在循环结束时,i等于somearray.length,因此当您调用该函数时,它会尝试访问不存在的元素数组。

你可以通过创建一个捕获变量值的函数构造函数来解决这个问题:

function makeFunc(j) { return function() { console.log(somearray[j][0]); } }

for (var i = 0; i < somearray.length; i++)
{
    myclass.foo({'arg1':somearray[i][0]}, makeFunc(i));
}

makeFunc的参数可以命名为i,但我将其称为j,以表明它与循环中使用的变量不同。

答案 1 :(得分:10)

关闭怎么样:

for (var i = 0; i < somearray.length; i++) {
    var val = somearray[i][0];
    myclass.foo({'arg1': val}, function(v) {
      return function() {console.log(v) };
    }(val) );
}

答案 2 :(得分:0)

for (var i = 0; i < somearray.length; i++)

{
    myclass.foo({'arg1':somearray[i][0]}, function(somearray)
    {
        console.log(somearray[i][0]);
    });
}

然后在方法foo中使用param调用匿名函数。

答案 3 :(得分:0)

您可以使用回调将变量值传递给匿名函数,

之类的东西
myclass.foo(function(variable){
      return function(){
        console.log(variable);
      }
    })(variableValue);
);

查看此帖子:https://shahpritesh.wordpress.com/2013/09/06/javascript-function-in-loop-passing-dynamic-variable-value/

答案 4 :(得分:-2)

所有函数/方法只能用作回调。当你调用回调函数时,你将变量传递给它。

var myclass = {
  foo: function(params, callback){
    // do some stuff
    callback(variable1, variable1, variableN);
  }
}