JS函数的执行时机对结果的影响

188 阅读1分钟

函数语句的执行时机不同,输出的结果就不同

以下代码为什么会打印出6个6?

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  • 函数一共会执行6次循环,每次循环到i = 6的时候就打印出值
  • 在有setTimeout()语句的情况下,需要把循环执行完后,再打印出i

让上面代码打印0~5的办法?

let i = 0合并到for循环中:

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
// => 0, 1, 2, 3, 4, 5
  • 为什么这个代码和上面打印6个6的那么相似,输出的结果却不一样?
  • 因为forlet在一起的时候,会把i复制一份出来,每次循环多创建一个i
  • 循环6次,加上let i = 0就是7个i

小技巧:除了使用for``let配合,还有什么方法可以打印出 0~5?

第1种方法:用for...in...语句遍历数组

let arr1 = [0,1,2,3,4,5]
for(i in arr1){
    console.log(i)
}

第2种方法:用do...while...循环输出

let i = 0
do {
    console.log(i)
    i++
} while (i < 6);

第3种方法:用forEach属性结合函数调用

let arr1 = [0,1,2,3,4,5]
arr1.forEach(function(i){ console.log(i) })