关于eventloop:深入理解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等(未完...)