[英]Loop always finishes, even with setTimeout
我正在运行一些JavaScript代码来测试/理解setTimeOut的行为。
我使用以下代码:
var timerx1 ;
if (timerx1) window.clearTimeout(timerx1);
timerx1 = setTimeout(testme, 10);
调用此函数:
function testme() {
for (var c = 0; c < 900000; c++) {
document.getElementById("divMode").innerHTML = c;
}
}
该循环将始终在退出之前完成。
我曾期望setTimeOut为10ms会“踢”进去,并且循环在完成之前会中止。
我强调这不是任何其他代码或应用程序的一部分。 我只是想了解setTiemOut的工作原理和任何限制。
setTimeout不会中断或“超时”循环:它只是在经过了很多时间后才调用回调函数。
在指定的延迟后调用函数或执行代码段。
setTimeout等待指定的毫秒数并执行函数。在您的示例中,您等待10ms
Javascript在堆栈上运行任务。 您的for循环完全作为这些循环之一执行。 当您使用setTimeout
它将采用您传入的函数并将其附加到该任务堆栈的末尾。 然后它将在适当的时候执行该任务。
// current thread | waiting
doSomething(); // execute now | --
setTimeout(doSomething, 10); // append to stack | doSomething (8ms left)
doSomethingElse(); // execute now | doSomething (5ms left)
// End of current thread // -- | doSomething (0ms left) do this next
// doSomething | --
SetTimeout立即返回,就好像它完成了一样。 它基本上分配功能挂起状态和当前线程完成之后将被执行(上方/返回当前函数) 和超时定时器结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.