JS 函数的执行时机

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() 放在 栈里面了,这样循环使用的isetTimeout()使用的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)
}
复制代码
分类:
前端
标签: