JavaScript 是单线程的,困扰最大的就是异步函数的问题;
Js的正常执行机制相信在座的各位都已经了然于胸,我们今天就谈谈我个人对于异步函数的执行机制的理解;
异步函数执行顺序如下:
任务进入执行栈;
异步任务进入EvEnt Table(事件表);
异步任务执行完毕后注册回调方法;
异步任务移入Event Queue(事件队列当中);
主线程任务列表任务执行空后,进入Event Queue 中提取任务(提取顺序 与排队顺序相同)
(也可将提取理解为指派 Event Queue 将任务指派过去);
主线程执行;
上述过程会不断重复,也就是常说的Event Loop(事件循环);
举个例子 上代码:
setTimeout(function(){
console.log('1')
},0);
new Promise(function(resolve){
console.log('2');
resolve();
}).then(function(){
console.log('3')
});
console.log('4');
执行结果为 2431 也就是说插入Event Queue 的排队顺序 也是 2431