来一道题:for循环的老题新作

72 阅读1分钟
解决这道题需要思考3个问题 1.作用域 2.定时器,3任务队列.
function fn1() {    for (var i = 0; i < 4; i++) {        var timer = setTimeout(function(i) {            console.log(i);            clearTimeout(timer)        }, 10, i);    }}fn1();  // 这个你好好想想,你在好好看看,第一次我看的是0,1,2,3 

// 第一 var声明的变量在函数作用域内
   第二 clearTime()清除定时器里面参数的含义 
   第三 setTimeout是宏任务需要在同步任务执行完之后在执行
   
   执行函数 for循环开始循环,每循环一次产生一个timer,当for循环全部执行完毕,timer执行,
   任务队列有四个定时器,而clear清除的timer 是第四个定时器.所以只产生了三次打印 0 ,1,2
  




.