console.log(1);
setTimeout(function() {
console.log(2)
}, 0)
console.log(3);
//结果: 1 3 2
console.log("A");
setTimeout(() => {
console.log("B");
})
while (true) {
}
//结果: A
//浏览器的定时器会记住setTimeout语句,等时间到了会放入异步队列中
for (var i = 0; i < 4; i++) {
setTimeout(function() {
console.log(i);
}, 1000)
}
//结果: 4 4 4 4
如何理解js的单线程
一个时间之内js只能干一件事
什么是任务队列和Event Loop
同步任务,异步任务
异步任务放入时间和执行时间:遇到setTimeout语句,识别为异步任务,不会在运行栈中执行,拿走等时间到了,放入任务队列中,同步任务执行完后,监听任务队列中,有就执行,如此循环就是事件循环

异步任务
- setTimeout和setInterval
- DOM事件
- ES6中的Promise
总结
- 理解js的单线程的概率
- 理解任务队列
- 理解Event Loop
- 理解哪些语句会放入异步任务队列
- 理解语句放入异步任务队列的时机
网友评论