解决这道题需要思考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
.