Javascript 由缺少警报()触发的无限循环
出于完全超出我理解的原因,此函数运行良好:Javascript 由缺少警报()触发的无限循环,javascript,jquery,Javascript,Jquery,出于完全超出我理解的原因,此函数运行良好: function foo() { var loop = true; var abc = ["a","b","c"]; var ctr = 0; while(loop) { $("<img />").error(function () { loop = false; }).attr('src','images/letters/'+abc[1]+(ctr++
function foo() {
var loop = true;
var abc = ["a","b","c"];
var ctr = 0;
while(loop) {
$("<img />").error(function () {
loop = false;
}).attr('src','images/letters/'+abc[1]+(ctr++)+".jpg");
alert(ctr);
}
}
有人能帮你澄清一下吗?在你的第一个代码片段中,循环中的
警报
函数调用会导致它暂时停止,可能会给错误
回调留出执行时间,将循环
标志设置为假
在您的第二个代码段中,当
警报调用不在while
中时,循环将执行多次,触发浏览器的。看不出原因,但在第二种情况下,似乎由于某种原因,变量作用域出现了混淆。我会非常小心您所做的事情。你看,你本质上是在旋转一个无限循环,依靠JS抛出的错误事件来中断这个循环。我猜想您看到了上述行为,因为调用alert()
是在传递消息,并给事件一个触发的机会。在后一个例子中,您只是在旋转CPU,没有给任何其他事情机会发生。在大多数浏览器中,在用户明确获得控制权(在您的情况下是通过警报)或javascript达到自然结论之前,不会向页面写入任何内容。如果没有暂停循环的警报,则永远不会生成.error()
考虑到abc的长度,是否可以编写for循环?Javascript是单线程和同步的。如果删除警报,则循环将使其保持忙碌状态,并且在处理完成之前不会抛出错误(实际上它将排队)。该警报会使无限循环暂停一段时间,并让Javascript处理排队事件。我真的不明白该函数的意义。。。请你再解释一下,也许我们可以找到另一个解决方案。伙计们,非常感谢你们的及时回复。我应该猜到这项活动没有机会举行,很高兴得到社区的肯定@oezi-脚本通过在触发onerror
事件后停止计数来检查实际存在的图像。这也是正确的,我只是无法分配两个正确答案。谢谢,CMS。
function foo2() {
var loop = true;
var abc = ["a","b","c"];
var ctr = 0;
while(loop) {
$("<img />").error(function () {
loop = false;
}).attr('src','images/letters/'+abc[1]+(ctr++)+".jpg");
}
alert(ctr);
}