Pho*_*ics 14 javascript closures loops anonymous-function
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
Run Code Online (Sandbox Code Playgroud)
如何将somearray或其中一个索引传递给匿名函数?somearray已经在全球范围内,但我仍然得到一些[i]未定义
Amn*_*non 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));
}
Run Code Online (Sandbox Code Playgroud)
makeFunc可能已经命名了这个参数i,但是我调用它j来表明它与循环中使用的变量不同.
Tom*_*lak 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) );
}
Run Code Online (Sandbox Code Playgroud)