js事件循环

先了解如下这戏概念性的东西多线程

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