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

somearrayまたはそのインデックスの1つを無名関数に渡すにはどうすればよいですか?somearrayはすでにグローバルスコープにありますが、それでもsomearray[i]が未定義になっています

4

5 に答える 5

30

匿名関数のは、ではなく変数iをキャプチャします。ループの終わりまでに、はに等しいので、関数を呼び出すと、存在しない要素配列にアクセスしようとします。 iisomearray.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

于 2010-06-11T15:14:26.350 に答える
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) );
}
于 2010-06-11T15:09:52.433 に答える
0
for (var i = 0; i < somearray.length; i++)

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

次に、メソッドfooで、paramを使用して無名関数を呼び出します。

于 2010-06-11T15:11:47.533 に答える
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/

于 2013-10-03T06:54:16.153 に答える
-2

すべての関数/メソッドは、コールバックとしてのみ使用できます。コールバック関数を呼び出すときは、変数を渡します。

var myclass = {
  foo: function(params, callback){
    // do some stuff
    callback(variable1, variable1, variableN);
  }
}
于 2010-06-11T15:07:44.260 に答える