JS函数的执行机制

134 阅读1分钟

J函数的执行机制

 let i = 0
 for(i = 0; i<6; i++){
   setTimeout(()=>{
     console.log(i)
   },0)
 }
 为什么打印出66

分析

声明变量i i=0 然后执行for循环,判断i是否小于6,否则i++ 循环体中setTimeout是指定多长时间后执行函数 setTimeout会在循环结束后执行,当i=6 时候循环结束 因为for循环中,循环了六次,循环了六次的setTimeout setTimeout在循环结束后执行,循环了六次所有打印出6个6

解决方法

方法1

 //把let这个写在for循环中
 //let允许你声明一个作用域被限制在 块级中的变量、语句或者表达式。与 var 关键字不同的是, var声明的变量只能是全局或者整个函数块的。
 for(let i = 0; i<6; i++){
   setTimeout(()=>{
     console.log(i)
   },0)
 }

方法2

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