获取apicallback的参数

这是我得到的

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 (data){ console.log(mods[i]); }); } } 

只有控制台日志输出未定义,我似乎弄清楚如何获取callback函数中的数据,因为callback数据不包含它

谁能告诉我,我怎么能做到这一点

这是一个问题,我在你的closures,当这个.api.stalk的callback被称为机会是,我是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); } 

以下是您可以如何解决closures问题:

 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) ); } }