它在你的閉合與我的一個問題,當this.api.stalk回調被稱爲有機會,我是mods.length。請看下面的例子:
var i = 0;
var arr=["hi","there"];
for(i=0;i<arr.length;i++){
setTimeout(function(){
console.log(arr[i]); //undefined
console.log("and i is:"+i); //i will be 2
},100);
}
這裏是你如何解決這個問題,關閉:
var i = 0;
var arr=["hi","there"];
for(i=0;i<arr.length;i++){
setTimeout(
(function(index){
return function(){
console.log("Index is:"+index);//0 and 1
console.log("arr at index:"+arr[index]);//hi and there
console.log("i is:"+i);//2 and 2
console.log("arr at i:"+arr[i]);//undefined and undefined
}
})(i)
,100);
}
你的代碼可能看起來是這樣的:
var mods = this.registry.gmmods;
for (var i = 0; i < mods.length; i++) {
if(mods[i] != this.config.botid){
this.api.stalk(mods[i],true,
(function(index){
return function (data){
console.log("index is:"+index);
console.log(mods[index]);
console.log("i is:"+i);
console.log(mods[i]);
}
})(i)
);
}
}
來源
2013-05-16 01:23:30
HMR
我不這樣,因爲我認爲可以在api調用之前記錄mods [i]並且工作正常 – mcgrailm
控制檯日誌未定義如我的示例中所示嗎?你能記下我的價值嗎?我不知道api.stalk是否是異步的,但如果它是那麼那就是你的問題。 – HMR
lol對,是的,它是異步的,那麼如何解決這個問題 – mcgrailm