const、let 和 var 区别

在JavaScript中,constletvar 都可以用来声明变量,但它们在行为和作用域上有显著的区别:

1. 作用域(Scope)

关键词 作用域
var 函数作用域。声明的变量在整个函数内可用。
let 块作用域。变量只在花括号 {} 内有效。
const 块作用域。与 let 一样,限定在块内。

示例:

function testVar() {
  if (true) {
    var x = 10; // 函数作用域
  }
  console.log(x); // 10
}

function testLet() {
  if (true) {
    let y = 20; // 块作用域
  }
  console.log(y); // 报错:y is not defined
}

testVar();
testLet();

2. 重新赋值(Reassignment)

关键词 是否可重新赋值
var 可以
let 可以
const 不可以(值不能被重新赋值)

示例:

var a = 1;
a = 2; // 可以

let b = 1;
b = 2; // 可以

const c = 1;
c = 2; // 报错:Assignment to constant variable.

3. 重新声明(Redeclaration)

关键词 是否可重新声明
var 可以
let 不可以
const 不可以

示例:

var x = 1;
var x = 2; // 可以,没问题

let y = 1;
let y = 2; // 报错:Identifier 'y' has already been declared

const z = 1;
const z = 2; // 报错:Identifier 'z' has already been declared

4. 变量提升(Hoisting)

关键词 是否存在变量提升
var 是,变量会提升,但值为 undefined
let 是,但在声明前使用会报错(暂时性死区)
const 是,但在声明前使用会报错(暂时性死区)

示例:

console.log(a); // undefined
var a = 5;

console.log(b); // 报错:Cannot access 'b' before initialization
let b = 10;

console.log(c); // 报错:Cannot access 'c' before initialization
const c = 15;

5. const 特别之处

  • const 声明的变量不能重新赋值,但如果是对象或数组,其内部的内容是可以更改的。

示例:

const obj = { name: "Alice" };
obj.name = "Bob"; // 可以修改对象属性

const arr = [1, 2, 3];
arr.push(4); // 可以修改数组内容

obj = {}; // 报错:Assignment to constant variable.

总结

  • var:适用于函数作用域的变量,但容易引发作用域混乱和意外错误,现代开发中不推荐使用。
  • let:块级作用域变量,推荐使用。
  • const:块级作用域,声明后不能重新赋值,适用于不可变的变量。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容