- js引擎运行的环境就是宿主环境,通常就是Web浏览器、node
- js引擎提供一种机制来处理分块执行的代码,这种机制就是事件循环:
事件循环伪代码:
var eventLoop = []; // eventLoop 作为队列的数据,存储待执行的事件
var event; // 当前要处理的事件
while(true){
// 一次tick
if(eventLoop.length > 0){
event = eventLoop.shift()
try{
// 执行当前事件
event()
} catch (err){
// 错误上报
reportError(err)
}
}
}
- setTimeout()为什么不精准?
因为setTimeout并没有把你的回调函数挂在事件循环中。作为一个定时器,当设定时间到达后,环境才把你的回调函数放入事件循环中。这时候你的事件队列可能很长了,所以这个回调执行的时间完全依赖事件队列的状态决定。
网友评论