JavaScript是单线程的,也就是在同一个事件内,只能做一件事;
JavaScript任务被分为: 同步任务和异步任务;
js引擎中存在有:主线程和任务队列;
js引擎解析代码时,会将所有的同步代码加入到主线程中依次执行,当碰到一个异步任务时,例如ajax,js引擎发送完ajax请求后,并不会等待响应,而是继续执行主线程上的代码,当收到发送ajax请求的响应后,js引擎会在任务队列中添加该事件, 并且将响应结果及相应的回调加入任务队列中,当主线程上的同步任务都执行完成后,js引擎会到任务队列中取出排在第一位的事件,并将其回调函数添加到主线程中执行,按照这个步骤依次执行下去;
js的任务分为 macro task(宏任务)和 micro task(微任务)
setTimeout()
和setInterval()
属于宏任务
Promise
属于微任务
微任务的优先级要高于宏任务,js引擎会先从取出微任务,然后再去宏任务中查找