毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> WEB开发 >> 正文

google chrome,javascript回调函数在for循环中无法正常访问循环变量

更新时间:2013-11-1:  来源:毕业论文

用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|....”。

其实很简单,因为你没有立即执行它,所以它在内存里的分配是同一位置,最好的方法,是立即执行,重新分配内存。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。