为什么 setimeout(function(), 0 ) 和 function() 之间有执行时间差
Why is there a execution time difference between setimeout(function(), 0 ) and function()?
我有一个javascript动画代码 -
function animate(position)
{
....
....
if(position++ < xyz){
animate(position); // ****this is the line that I replace with in the next attempt.
}
}
这大约需要 1 秒才能执行。但是如果我把一个超时函数放一个0时间,大约需要15秒才能完成。
setTimeout(function(){
animate(position);
}, 0);
为什么会发生这种巨大的时差?在代码中,我试图在HTML5画布上绘制一些像素。我省略了这些代码,以使我的问题更清楚。
这样做的
原因是 JavaScript 在内部处理计时器的方式。由于 JavaScript 是单线程的,因此不会同时运行任何内容。将 0 毫秒传递给 setTimeout
只会强制函数在第一个可用时刻运行。 约翰·雷西格(John Resig)在 http://ejohn.org/blog/how-javascript-timers-work/对此有一篇很好的文章。
您可以通过运行以下命令来查看这一点:
setTimeout(function() {
console.log('one');
}, 0);
console.log('two');
two
在one
之前记录。
我假设您有一堆其他事情正在运行,并且通过排队animate
,您可以让执行等到其他事情完成。
https://developer.mozilla.org/en/DOM/window.setTimeout 有一些关于setTimeout
夹紧的信息。请参阅"最小延迟"部分。
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- if(function()===false){执行此操作}
- node.js 使用 function.prototype.apply 执行的泛型函数
- 为什么 setimeout(function(), 0 ) 和 function() 之间有执行时间差
- $(document).ready(function()) 是否仅在加载 JSP 后执行
- 如何在c#下向web服务器发送执行js-function的请求
- $(window).load(function())在完全加载文档后执行失败
- jQuery's function $(function())的执行顺序当$(function())被多次调用时
- Jquery ajax代码在$. done(function())之后没有被执行
- 只在第一次单击时执行.click(function())
- jQuery对话框模式在ALERT之后未执行$.post(function(){})
- 当keyPress()不在时,keyUp()在2秒内执行function()
- 窗口.Onresize = function {//code}似乎没有执行我的内部代码