使用setTimeout注册的函数何时调用
When is the function registered with setTimeout called?
它可能是在执行"某些"正常代码后调用的?但我不确定。。。如果有一种足以描绘javascript代码在浏览器中执行的全貌,那就太好了。
大多数时候,浏览器执行线程都处于空闲状态,不运行任何代码。当您注册要使用setTimeout
执行的某个函数时,它将不早于给定的毫秒数执行。
现在:如果在给定的时间后,其他一些代码正在执行(如事件处理程序或长循环),浏览器工作线程将很忙,您的函数将不得不等待。考虑这个代码:
setTimeout(f, 500);
for(var i = 0; i < 10000000; ++i){
//...
}
CCD_ 2立即返回,允许执行循环。如果这个循环运行超过500毫秒,它不会被中断,并且您的f
函数将不得不等待。如果在例如490毫秒之后触发一些冗长的事件处理程序,也会发生同样的事情。
将浏览器JS工作线程视为具有单个使用者和多个生产者的队列。队列中的某些项目可以立即提取(如事件处理程序),有些项目必须等到超时为止。
Javascript是单线程的,使用调用堆栈运行,本质上是先到先得的服务处理。
setInterval和setTimeout函数在提供的持续时间过后将传递的函数放入调用堆栈。这里的区别在于,结果在那个时候不执行,它们只是被放入调用堆栈中,所以如果某个东西已经在运行,它不会执行您在超时时提供的函数,直到您完成为止。
例如:
var i = 0;
setTimeout(function() { i = 1; }, 10);
for (; i < 1;) {}
你永远无法摆脱for循环,即使在10ms后,将i设置为1的函数被调用,它只在调用堆栈上,在for循环完成之前不会生效。
也许我不理解这个问题。。但这是直接从window
规范中获得的
setTimeout(函数,毫秒)此方法调用函数一次在指定数量的毫秒过去,直到取消通过调用clearTimeout。方法返回可用于对clearTimeout的后续调用取消间隔。
参考
基本上,函数是在您指定的毫秒数过后立即调用的。
- 从 jquery.ready() 调用的 javascript 何时相对于 中的脚本运行
- 何时调用服务器 onClick vs OnClientClick
- 何时返回jQuery函数,而不是仅仅调用它
- 说明ajax何时在document.ready中调用
- 检测任何 ajax 调用何时失败
- 检测何时从控制台调用函数的最佳方法
- 如何检测何时在 jQuery 中调用 .html() 函数
- 调用 JavaScript 函数时何时使用 ()
- 何时可以安全地调用 URL.revokeObjectURL
- 事件和调用,何时使用,何时不使用
- 何时以及如何调用查找页面滚动操作的 javascript 函数
- 如何判断Iframe何时调用了外部调用页面中的所有链接
- 何时调用ScrollHeight的Javascript
- JS如何确定何时调用回调函数
- 在控制器中调用渲染后,何时调用下一行?Yii - PHP
- 如何以及何时调用Javascript全局匿名函数
- 何时调用XMLHttpRequest
- 使用setTimeout注册的函数何时调用
- 将在何时调用扩展程序函数
- 何时调用' React.createClass({})() ' ?