函数语句的执行时机不同,输出的结果就不同
以下代码为什么会打印出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的那么相似,输出的结果却不一样?
- 因为
for和let在一起的时候,会把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) })