JavaScript的运行顺序就是完全单线程的异步模型:同步在前,异步在后。所有的异步任务都要等待当前的同步任务执行完毕之后才能执行。
- JavaScript是单线程
- 执行内容分为普通代码(如 var a = 1),任务:宏任务(如setTimeout())和微任务(如Promise.then())
- 执行过程涉及栈(FILO)和队列结构(FIFO)
- JavaScript代码整体当作宏任务
- 解析代码时,普通代码先执行,遇到任务加入队列
- 代码执行时,按顺序:普通代码执行完成> 执行微任务队列全部微任务> 执行一个宏任务> 检查微任务是否执行完成,未完成,执行所有微任务> 执行一个宏任务> 检查微任务是否执行完成,未完成,执行所有微任务>...
举例1:
console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve().then(function() { console.log('promise1'); }).then(function() { console.log('promise2'); }); console.log('script end'); 输出: script start script end promise1 promise2 setTimeout
举例2:
Promise.resolve().then(function(){ console.log('resolve1') setTimeout(function(){ console.log('setTimeout1') },0) }) setTimeout(function(){ console.log('setTimeout2') Promise.resolve().then(function(){ console.log('resolve2') }) },) 输出: resolve1 setTimeout2 resolve2 setTimeout1
标签:function,执行,console,log,javascript,任务,循环,事件,setTimeout From: https://www.cnblogs.com/bigjor/p/17009819.html