setTimeout没有'不能立即启动
setTimeout doesn't start instantly
当我将以下函数放在文档的头部时:
(function(){
var d = new Date().getTime();
console.log(new Date().getTime() - d);
window.setTimeout(function(){
console.log(new Date().getTime() - d)
}, 1);
window.setTimeout(function(){
console.log(new Date().getTime() - d)
}, 10);
window.setTimeout(function(){
console.log(new Date().getTime() - d)
}, 100);
window.setTimeout(function(){
console.log(new Date().getTime() - d)
}, 1000);
}());
我有这些日志:
0
401
401
402
1397
在setTimeout
启动之前似乎有400ms的延迟。为什么?
Javascript不是多线程的-setTimeout
不会立即启动。当您调用setTimeout
时,只会将该函数放入队列中,以便在当前执行堆栈展开时执行。在您的情况下,大约需要400毫秒才能达到这一点。
请参阅计时器的工作原理以获取有关此方面的良好教程。特别是,这个报价是相关的:
为了了解定时器是如何在内部工作的,有一个重要的概念需要探索:定时器延迟是不能保证的。由于浏览器中的所有JavaScript都在单线程上执行,异步事件(如鼠标单击和计时器)只有在执行中出现打开时才会运行。
相关文章:
- 不能从angular2中的子组件指定父组件中的数组
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 转义符不能与innerHTML一起使用
- JSON.parse没有'不能使用Javascript
- JS可以在Chrome中工作,但不能在Firefox中工作
- 砌体不能填补小缺口
- javascript扫雷器floodfill算法不能正常工作
- JavaScript指令不能像我想象的那样工作
- 为什么在这个网站上不能通过JS访问元素
- Facebook登录按钮没有'不能在Firefox上工作
- setTimeout没有'不能立即启动
- iOS 9.3.2自定义URL方案不能从Safari启动应用程序
- 没有节点服务器的Angular2应用不能从index.html启动
- 没有eval()不能启动Aurelia应用程序
- 不能在Selenium中启动带有WebDriverJs的ie浏览器
- 功能不能正常启动
- 为什么我不能从其他浏览器启动Internet Explorer中的网页?
- 附加的ahref不能在单击时启动函数
- 启动日期时间选择器不能在只读或禁用的情况下工作