js中for中的var和let的区别
时间: 2023-08-08 11:09:17 浏览: 101
详解js中let与var声明变量的区别
在 JavaScript 中,`var` 和 `let` 都可以用于声明变量。但是它们在声明变量的作用域和可变性方面有所不同。
`var` 声明的变量是函数作用域或全局作用域,而 `let` 声明的变量是块级作用域。这意味着,在函数内部用 `var` 声明的变量,在函数外部也可以访问到;而在块级作用域中用 `let` 声明的变量,只能在该块级作用域内部访问。
此外,`let` 声明的变量是可变的,也就是说,可以在同一作用域内重新赋值。而用 `var` 声明的变量在同一作用域内也可以重新赋值,但是会存在变量提升问题,可能会导致一些意外的行为。
例如:
```
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
```
上面的代码会在5秒后连续输出5个5,因为用 `var` 声明的变量 `i` 是函数作用域,所以在 `setTimeout` 回调函数执行时,`i` 的值已经是5了。
而如果用 `let` 声明变量 `i`,则可以避免以上问题:
```
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
```
这个代码会在5秒后输出0、1、2、3、4,因为用 `let` 声明的变量 `i` 是块级作用域,每次循环时都会创建一个新的变量 `i`。
阅读全文