写代码啦
《JS 函数的执行时机》
回复数(0) 浏览数(16)
{{topic.upvote_count || 0}} 编辑 回复

1 解释为什么如下代码会打印 6 个 6

let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}

let i是在for循环外面进行的定义,setTimeout函数是在“延时”的意思,在for循环结束后的 i 输出,进行6次循环
就如同
```
let i = 0;
for (i = 0;i<6;i++){

}
此时 i= 6
setTimeout(()=>{
console.log(i);
},0)

2. 写出让上面代码打印 0、1、2、3、4、5 的方法

for (let i = 0;i<6;i++){
setTimeout(()=>{
console.log(i);
})
}
```
这是因为每次循环都对 i 进行了重新的声明,第二次循环中的 i 和第一次循环中的 i 不是一个 i
所有setTimeout 不管延时多长时间,每次循环的 i 还是那个 i 不会变的,所以可以打印出0 1 2 3 4 5

  1. 如果想不用for let 的结合输出 0 1 2 3 4 5,还有一种方法就是使用立即执行函数 {! function (){}}
    for (var i = 0 ; i <6 ; i++){ !function (i){ setTimeout(()=>console.log(i)) }(i) }
    上述就是立即执行函数,每次声明一个var 就在立即函数中执行,第一次循环的 i 和第二次循环的 i 不是一个 i ,
    含义和用 let 差不多

以上内容属于饥人谷和本人所有

{{topic.upvote_count || 0}}

1 解释为什么如下代码会打印 6 个 6

let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}

let i是在for循环外面进行的定义,setTimeout函数是在“延时”的意思,在for循环结束后的 i 输出,进行6次循环
就如同
```
let i = 0;
for (i = 0;i<6;i++){

}
此时 i= 6
setTimeout(()=>{
console.log(i);
},0)

2. 写出让上面代码打印 0、1、2、3、4、5 的方法

for (let i = 0;i<6;i++){
setTimeout(()=>{
console.log(i);
})
}
```
这是因为每次循环都对 i 进行了重新的声明,第二次循环中的 i 和第一次循环中的 i 不是一个 i
所有setTimeout 不管延时多长时间,每次循环的 i 还是那个 i 不会变的,所以可以打印出0 1 2 3 4 5

  1. 如果想不用for let 的结合输出 0 1 2 3 4 5,还有一种方法就是使用立即执行函数 {! function (){}}
    for (var i = 0 ; i <6 ; i++){ !function (i){ setTimeout(()=>console.log(i)) }(i) }
    上述就是立即执行函数,每次声明一个var 就在立即函数中执行,第一次循环的 i 和第二次循环的 i 不是一个 i ,
    含义和用 let 差不多

以上内容属于饥人谷和本人所有

16
回复 编辑