1. 解释为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
复制代码
setTimeout()
函数是一个 延迟执行的函数。
当他执行的时候,for(){}
循环已经执行完闭,此时i=6
。
所以,会看到 6个6的现象。
for(let i=0;i<6;i++){
let ii=0
ii++
setTimeout(()=>{
console.log(ii)
},0)
}
//这样会看到 6个0
//for(在 小扩号 里声明let){与在大扩号里 声明let不同!大扩号 里声明的let无法在 小扩号 里面使用!}
复制代码
2. 写出让上面代码打印 0、1、2、3、4、5 的方法
for(let i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
复制代码
在for
的()·
里面使用let i =0
就可以了,这样,每次循环的时候,都会保存i
的当前值,供setTimeout()
使用。
我推测可能是 每次循环都复制 i
的值,把它和setTimeout()
放在 栈里面了,这样循环使用的i
和setTimeout()
使用的i
就不是相同的。(可能是这样,以后再学一下 JS的设计基础,看看到底是怎么回事,现在这个内容太深了
3. 除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5,如果你能找到并写在博客里,可以得到五星好评 :)
//这个目前我还真不会,回头有答案再来写
let i = 0
for(i = 0; i<6; i++){
var forVal=i
setTimeout(()=>{
console.log(forVal)
},0)
}
复制代码