js的执行,一个文件不管链接了多少个js文件,在载入执行的时候,都是按先后载入依次执行(js是单线程的):先执行同步代码,遇到异步代码会先被放置到内存中的事件池中,待同步代码全部执行完成后,再从事件池中调取满足条件的异步代码依次执行(先进先出),同时满足条件的按照先进先出的顺序执行;所谓异步代码,还分宏任务队列和微任务队列:
——宏任务MacroTask:比较大、耗时的任务,setTimeout、setInterval、setImmediate(IE独有)……
——微任务MicroTask:小、不太耗时的任务,promise、MutationObserver、process.nextTick(node独有)
在浏览器运行环境中,同步代码执行完成后,先去微任务队列找符合执行条件的微任务执行,符合条件的微任务全部执行完成后,去宏任务队列找符合条件的宏任务执行,每执行完一个宏任务,再去微任务队列找符合执行条件的微任务执行,将符合执行条件的微任务清空一遍,这样循环执行。
在node运行环境中,没有微任务队列,但可以理解成有一个微任务池,而宏任务有六大队列
网友评论