for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何將somearray或其索引之一傳遞給匿名函數? 是的someArray已經在全球範圍內,但我仍然得到的someArray [i]是未定義JavaScript的參數匿名函數
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function()
{
console.log(somearray[i][0]);
});
}
如何將somearray或其索引之一傳遞給匿名函數? 是的someArray已經在全球範圍內,但我仍然得到的someArray [i]是未定義JavaScript的參數匿名函數
在匿名功能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對問題給出了很好的解釋,並提供了一個解決方案! – Matt 2010-06-11 15:19:41
我明白了你的觀點。謝謝。但我只是不知道如何調用makeFunc。 – Phonethics 2010-06-11 18:16:19
太棒了!我解決了我的問題。這對於我來說在JavaScript中完全是一件新事物! – Phonethics 2010-06-12 03:45:20
所有函數/方法可以作爲唯一的回調。當你調用回調函數時,你將變量傳遞給它。
var myclass = {
foo: function(params, callback){
// do some stuff
callback(variable1, variable1, variableN);
}
}
怎麼樣關閉:
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));
}
for (var i = 0; i < somearray.length; i++)
{
myclass.foo({'arg1':somearray[i][0]}, function(somearray)
{
console.log(somearray[i][0]);
});
}
然後用PARAM foo方法調用匿名函數。
您可以通過使用回調傳遞變量值annoymous功能, 像
myclass.foo(function(variable){
return function(){
console.log(variable);
}
})(variableValue);
);
這是一個共同的問題 - 查看所有相關的問題的http://計算器。 com/questions/tagged/javascript + closures + loops – Anurag 2010-06-11 18:49:08