JS 函数的执行时机

117 阅读1分钟

1.为什么如下代码会打印 6 个 6

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

因为let i = 0定义在了for循环外面,再把i放到for循环里面的时候作用域发生了改变,i的作用域不在for循环里面,因此会先循环完,之后再打印i,此时的for循环外面的i已经变成了6

2.写出让上面代码打印 0、1、2、3、4、5 的方法

for(let i = 0;i<6;i++){
    setTimeout(()=>{
    console.log(i)
  },0)
}

3.其他方法打印0、1、2、3、4、5 的方法

let i = 0;
for (i = 0; i < 6; i++) { 
    (function(i){      //立刻执行函数
        setTimeout(function (){
            console.log(i);  
         },0);  
    })(i);  
}