深入理解JavaScript之彻底弄懂JsEventLoop执行机制

JavaScript单线程起源:

JavaScript作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM,为了避免复杂性,诞生开始,JavaScript就是单线程语言。
比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了避免复杂性,从一诞生,JavaScript就是单线程。

单线程及存在的问题:

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。

问题的解决--同步、异步

synchronous(同步任务)和asynchronousk(异步任务)

  • 同步任务是调用立即得到结果的任务,同步任务在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
  • 异步任务是调用无法立即得到结果的任务,需要额外的操作才能预期结果的任务,异步任务不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

macro-task(宏任务)和micro-task(微任务)

  • 宏任务:macro-task 可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行,每一个宏任务会从头到尾将这个任务执行完毕,不会执行其它)包括整体代码script,setTimeout,setInterval等
  • 微任务:micro-task可以理解是在当前 task 执行结束后立即执行的任务 包括Promise,process.nextTick等
    (未完...)

你可能感兴趣的:(深入理解JavaScript之彻底弄懂JsEventLoop执行机制)