下面的代码输出结果为: for(var i=0;i<3;i++){ setTimeout(function(){ console.log(i) },1000) }
时间: 2024-01-17 18:03:17 浏览: 23
这段代码的输出结果为:
```
3
3
3
```
原因是因为 `setTimeout()` 方法是异步的,每个函数都在循环结束后执行,此时 `i` 的值已经变成了 3。为了得到期望的输出结果,可以使用闭包来保存每个循环的 `i` 值,例如:
```
for (var i = 0; i < 3; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i);
}
```
这样输出结果就是:
```
0
1
2
```
相关问题
5.下面代码输出什么: for(var i = 0;i<5;i++) { setTimeout(()=>{ console.log(i) }) } 答案:5 如果要输出0到4怎么修改?
可以使用立即执行函数(IIFE)将当前的i值保存在一个新的作用域中,每次循环取出对应的值,如下所示:
```
for(var i = 0; i < 5; i++) {
(function(j) {
setTimeout(() => {
console.log(j)
});
})(i);
}
```
或者可以使用ES6中的let关键字,let关键字会在每次循环迭代时创建一个新的绑定,从而避免了闭包的问题,如下所示:
```
for(let i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i)
});
}
```
for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, 1000*i) }
这段代码会输出以下内容:
5
5
5
5
5
这是因为在循环中的setTimeout函数是异步的,它会在循环结束后才执行。因此,当函数执行时,变量i已经被循环到了5,所以会输出5五次。
为了解决这个问题,可以使用闭包来保留变量i的值,或者使用let关键字将变量i声明为块级作用域。例如:
// 使用闭包
for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000*i)
})(i);
}
// 使用let
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000*i)
}
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)