js中let,var,const有什么区别
时间: 2024-03-16 11:44:59 浏览: 160
在 JavaScript 中,`let`、`var`、`const` 三个关键字都用于声明变量,但它们之间有一些区别。
1. `var` 声明的变量是函数作用域或全局作用域,而 `let` 和 `const` 声明的变量是块级作用域。块级作用域指的是由花括号 `{}` 包裹的代码块。在块级作用域中声明的变量,在代码块外部是不可访问的。
2. `var` 声明的变量可以被重复声明,而 `let` 和 `const` 同名变量不可重复声明。这意味着在同一作用域内,使用 `let` 或 `const` 声明同名变量会抛出异常。
3. `var` 声明的变量可以在声明之前使用,而 `let` 和 `const` 声明的变量不行。这种在声明之前使用变量的现象称为“变量提升”,在使用 `let` 或 `const` 声明变量时,变量只有在声明后才能使用。
4. `let` 声明的变量可以被重新赋值,而 `const` 声明的变量不可被重新赋值。这意味着使用 `const` 声明的变量一旦被赋值后,就不能再次改变其值。
以下是一个例子,展示了 `let`、`var`、`const` 之间的区别:
```javascript
var a = 1;
let b = 2;
const c = 3;
{
var a = 4; // 在代码块外重新赋值变量 a
let b = 5; // 在代码块内重新声明变量 b
const c = 6; // 在代码块内重新声明变量 c
console.log(a); // 输出 4
console.log(b); // 输出 5
console.log(c); // 输出 6
}
console.log(a); // 输出 4
console.log(b); // 输出 2
console.log(c); // 输出 3
var a = 7; // 可以重复声明变量 a
let b = 8; // 抛出异常,因为 b 已经在同一作用域内被声明
const c = 9; // 抛出异常,因为 c 已经在同一作用域内被声明
b = 10; // 可以重新赋值变量 b
c = 11; // 抛出异常,因为 const 声明的变量不可被重新赋值
```
在上面的示例中,变量 `a` 是使用 `var` 声明的,因此其是全局作用域的。在代码块内部重新赋值变量 `a` 后,在代码块外部也能访问到修改后的值。变量 `b` 和 `c` 是使用 `let` 和 `const` 声明的,因此它们是代码块的局部变量。在代码块内部重新声明变量 `b` 和 `c` 后,在代码块外部访问的是外部的变量。另外,使用 `let` 和 `const` 声明变量时,不能重复声明同名变量,否则会抛出异常。使用 `const` 声明的变量不可被重新赋值,这意味着一旦被赋值后,其值不能再次改变。
阅读全文