最近面试的时候,经常会遇到这类问题,比如:你怎么理解JS的事件处理机制?什么任务优先级高,什么任务会在主进程中?

   我觉得从一个例子出发可以很好的从各方面的去分析,这样也会是一个比较满意的答案   常见的例子:               for(var i = 0; i<10; i++) {                   setTimeout(()=>{                       console.log(i)                   },0)               }         这里我们如果不去思考一下很容易得出 0-9 这类答案,仔细思考就会发现这里输出的是10次10          这里我们可以先从JS的处理机制先说起,在JS的处理机制里 同步最高>异步>回调函数                  那么这里我们就很容易理解了,那在执行中顺序就是,先执行完同步代码for循环,然后在0ms后执行异步代码setTimeout。         因为在执行的时候setTimeout函数会去找i这个变量,但是由于i在for里面执行完之后已经变为10,由于是var声明对于settimeout而言是全局变量,所以打印了10次10         那如果需要实现打印0-9的话呢?                  第一种方法:使用ES6中的let 很容去解决作用域的问题         如果只用ES5的方法呢,我们可以用这样实现         for(var i = 0; i<10; i++) {             (function(i){              setTimeout(()=>{                       console.log(i)                   },0)             })(i)                                  }                  在这里去执行**立即执行函数**,它会迫使每次进入循环之前都会立即去执行代码,从而保证得到i都是不一样的