js事件循环
先了解以下这戏概念性的东西
1、单线程 :一个任务执行后再执行另一个任务
多线程 :同时处理多个任务
2、同步任务(阻塞) :在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务(非阻塞):不进入主线程、而进入"任务队列"的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
js为什么选择单线程?
如果两个线程同时操作同一个dom肯定会发生冲突,而单线程完美的避免了这个问题。打个比方:一家公司有两个老板,a老板让员工往东,而b老板让员工往西,这时员工不知道该听哪个老板的,净剩下两个老板吵架了。而单线程就像是一个公司只有一个老板,他让往东就往东,往西就往西,不会有冲突
为什么要异步?
如果单线程同步的话,像三十秒后关闭广告这种操作,这三十秒期间无法进行任何操作,因为线程一直在等待他的执行结果,等它执行完了才能继续下面的操作
js事件循环就是以上问题的解决方案
1、所有同步任务都在主线程上执行,形成一个执行栈。
2、主线程之外,还存在一个"任务队列"。只要异步任务有了运行结果,就在"任务队列"之中放置一个任务。
3、一旦"执行栈"中的所有同步任务执行完毕,系统会从任务列队中,将有结果的任务放入主线程执行
4、主线程不断重复上面的第三步。
白话总结:
先把电饭锅插上就不管了,等我的菜炒完了再回来看看大米饭熟没熟