在JS执行中都是单线程执行,所以代码的执行可以说是自上而下,如果前一段的代码出现问题,就会导致下一段代码无法执行,对于用户而言就是卡死现象,所以在JS执行机制引出了异步执行操作。
事件循环
**首先,**判断JS是同步还是异步,同步进入主线程,异步进入Event table
**其次,**异步任务在Event table中注册函数,当满足特定的条件,被推入Event queue
**最后,**同步任务进入主线程后一直执行,直到主线程空闲后,才会去Event queue中查看是否有可执行的异步任务,如果有就推入主线程中执行。
定时任务是等定时器结束之后将函数放入任务队列
console.log("1");
setTimeout(()=>{
console.log("2");
},0);
console.log("3");
以上代码的执行顺序是
console.log("1")是同步任务,放入主线程,
setTimeout()是异步任务,被放入Event table,0秒后被推入Event queue里,
console.log("3")是同步任务,放入主线程
当1、3任务先执行完后,主线程去Event queue(事件队列)里查看是否有可执行的函数,执行setTimeout里的函数。