先思考一个问题
问:解释为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
答:6个6
一、调用的时机不同,结果也不同
1、如何得出6个6
-
setTime的意思是当你把手头的事情忙完之后再打印出i,0就是什么事情都不要等,立马打印出i
-
把for循环执行完,打印出i
-
for循环在i = 6的时候才会停止,如果i = 5的时候,会进入循环,进行i++操作,得出结果6,然后判断,在不满足中间条件的时候才会跳出循环,就是i = 6的时候才不会满足条件,跳出循环
2、如何得出0,1,2,3,4,5
for(let i = 0;i<6;i++){
setTimeout(() =>{
console.log(i)
},0)
}
-
每次进入这个循环的时候,把这个i复制一份,第一次循环把i=0复制一份,留在这里,第二次...每次循环会多留一个i
-
因为它把i复制了六遍
3、还有其他方法吗?
function fn(x){
if(x<6){
return x
}
}
总结:
调用时机因为JS的函数,由于变量的值会变,所以每次在求值的时候,都要想一下所有代码的顺序是怎么样的,如果不确定这个调用顺序,那么这个值很可能是以前的或者是错的