变量的声明,函数的调用,在不同的位置会有不一样的效果,先后顺序决定了代码的实际运行结果,这里就涉及到了函数的执行时机的问题。
先来看两段代码
- 代码(1)
let a = 0
for(a = 0; a < 6; a++){
setTimeout(()=>{
console.log(a)
},0)
}
- 代码(2)
for(let a = 0; a < 6; a++){
setTimeout(()=>{
console.log(a)
},0)
}
两段代码的区别只是let在for之前还是之后的问题,但是执行结果却截然不同


- 按照新手的理解呢,第二种输出才是合情合理的,输出
a,然后执行a++,然后判断a<6 - 但是,这里有个
setTimeout,过一会再执行!就比如你在上班,你女朋友叫你陪她,那肯定是先上班,等到下班之后再第一时间去陪女朋友,要不然喝西北风吗!!! - 这里就是先忙完
for循环再输出,然后再执行后续的打印输出。 - 那第一种0-5的输出呢是J每一次循环,都会重新初始化
let a,每一次循环都把a的值进行一次拷贝
一个问题:不用for,let的组合实现0-5的输出
我有一个很直接的想法,直接到我感觉JS不应该如此简单。。。。。
- 答案1.0


不用setTimeout就好了啊,哪那么复杂,但是这里是不用for和let
然后我就又傻了,继续思考中.......
- 答案2.0
参考了别人的回答可以搞个即时函数啊
let i=0
for( i=0 ; i<6; i++) {
!function(i){
setTimeout(()=>{
console.log(i)
}, 0)
}(i)
}

- 答案3.0
这个是请教的答案,搞个中间变量
let a = 0
for (a = 0;a<6;a++){
let j = a
setTimeout(()=>{
console.log(j)},0)
}
