一.js事件机制是单线程非阻塞的
(1)单线程:按顺序执行
(2)非阻塞:event loop[lu:p]
event loop[lu:p]怎么实现非阻塞
先从执行栈和任务队列说起
执行栈:就是js所有同步任务都在主线程(call stack[stack])上执行,这里的主线程就是执行栈
推荐一个网站可视化工具loupe[lup]可以帮助观看js的调用堆栈、执行顺序
http://latentflip.com/loupe
异步任务是不进入主线程的,而是进入了任务队列,只有任务队列(Callback Queue)通知主线程,说某个异步可以执行了,这个任务才进入主线程
function a(){
b();
console.log('a');
}
function b(){
console.log('b');
//这边就是一个异步,先会放在任务队列两秒,两秒后会在主线程执行
setTimeout(function(){
console.log('c');
},2000)
}
a();
总结:
面试时把同步、异步、执行栈、任务队列之间的关系说清楚
深入了解:
深入理解js事件循环机制(浏览器篇)http://lynnelv.github.io/js-event-loop-browser
///查看js堆栈执行顺序http://latentflip.com/loupe