我会发疯的。我正在编写代码,循环地从服务器获取数据,如果我使用while循环:
var i = 100;
while (200>i) {
zz.api("get", {"offset": i, "v": 5.14}, function(data) {
ids = ids.concat(data.response.items.map(maps));
i= i + 100;
alert(ids.length);
});
}
chrome选项卡停止响应,Firefox崩溃
如果我使用for loop
var i = 100;
for (i=100; i<200; i= i+100) {
zz.api("get", {"offset": i, "v": 5.14}, function(data) {
ids = ids.concat(data.response.items.map(maps));
alert(ids.length);
});
}
脚本执行正确。
我做错了什么?我不能理解,为什么浏览器死于"while"循环。
使用
可以得到与for
相同的结果var i = 100;
while (200>i) {
zz.api("get", {"offset": i, "v": 5.14}, function(data) {
ids = ids.concat(data.response.items.map(maps));
alert(ids.length);
});
i= i + 100;
}
在另一种情况下,while
保持无限执行,直到async
调用完成,回调被调用,但由于这个循环无限回调将永远不会在javascript单线程执行中被调用,并且i永远不会被增加。同时,无限数量的zz.api
被调用,导致许多ajax调用,这有助于更容易崩溃。
你们忘记了" break ";标签,它结束循环。没有它,它就会崩溃。你也可以做一个do while循环,效果很好