JavaScript之运行机制
这章节采用先题目后原理的说法为大家讲解。 一、引入题目 我们先看一道题目吧! console.log(1); setTimeout(()=>{ console.log(2) },0); console.log(3) 你们觉得上面打印的顺序是什么呢?如果你不了解JS运行机制,那么你就犯错吧。其实上面打印的是1 3 2,是不是很奇怪呢?这是为什么呢?相信小伙伴现在已经出现了1000多个疑问,不着急,听我慢慢分解吧。 二、单线程是什么?为什么JS要用单线程? 单线程大白话就是你 同一个时间你就只能做一件事情 。JavaScript的单线程,与它的用途有关。JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。就比如说,你更新的时候同时点击删除,不可能吧。 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着 。 三、理解任务队列(消息队列) JavaScript语言的设计者意识到这个问题,将所有任务分成两种, 一种是同步任务(synchronous),另一种是异步任务(asynchronous) 。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务