用google chrome的console功能进行javascript测试,
var r,i; s=""//一堆用户名的数组 r=""for(i = 0;i<10;i++){ nova_request(function(response){ r=r+i+"|" },'/user/chk/',{key: 'username',vo: s[i]},'get'); }
r的结果10|10|10|10|10|10|10|10|10|10|
希望r的结果0|1|2|3|4|5|6|7|8|9|
for(i = 0;i<10;i++){
(function(x){
nova_request(function(response){
r=r+x+"|"
},'/user/chk/',{key: 'username',vo: s[x]},'get');
})(i)
}
只有nova_request执行完毕才会进行下一次循环!
楼主没有贴出nova_request的具体代码来,估计楼主在nova_request里有异步,那么:没有执行完的就不是nova_request,而是每次执行完nova_request进行回调的函数:function(response){...}。十次循环循环瞬间执行完毕后i值变成了10,而此时累计起来的10个回调才依次执行(异步需要与后台通信,回调函数需要等待响应才能执行,响应的过程中程序正常往下运行。因为这里的循环非常简单,所以在第一个回调响应之前10次循环就全部执行完了),因为i已经等于10,所以结果就会是你看到的“10|10|....”。
其实很简单,因为你没有立即执行它,所以它在内存里的分配是同一位置,最好的方法,是立即执行,重新分配内存。