- 以下代码输出结果以及原因
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
//输出6、6、6、6、6、6(6个6)
首先在for循环之前let i
定义了变量i
,setTimeout(code,millisec)方法用于在指定的millisec毫秒数后调用函数或计算表达式。在执行for循环时,执行了6次setTimeout 后打印i
,真正打印i
的时候,i
的值已经执行完了循环变成了6,所以打印出来6个6
- 0、1、2、3、4、5 的方法
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
在for循环中定义变量i
,每次执行循环时i
都会被复制一份,留在执行环境内,所以不影响上一次循环的变量i
- 除了使用 for let 配合,其他方法可以打印出 0、1、2、3、4、5的方法
for(let i = 0; i<6; i++){
! function(){
console.log(i)
}(i)
}
每次执行循环时i
作为参数传进局部函数,形成闭包,上一次的循环i
不会被影响
网友评论