JavaScript中声明变量的关键字const/let/var区别

目录

在 JavaScript 中,const、let 和 var 都用于声明变量,但它们在 作用域、提升(hoisting)、重复声明 和 可变性 等方面有显著区别

1. 作用域(Scope)

2. 变量提升(Hoisting)

3. 重复声明

4. 可变性(Reassignment)

5. 最佳实践

总结


这三个关键字隔一段时间就会忘记区别,需要把这三个的区别记录一下

在 JavaScript 中,constletvar 都用于声明变量,但它们在 作用域、提升(hoisting)、重复声明 和 可变性 等方面有显著区别

1. 作用域(Scope)

关键字作用域类型示例
var函数作用域(Function Scope)在整个函数内有效
let块级作用域(Block Scope)仅在 {} 内有效
const块级作用域(Block Scope)仅在 {} 内有效

例如:

function scopeExample() {
    if (true) {
        var varVar = "var"; // 函数作用域
        let letVar = "let"; // 块级作用域
        const constVar = "const"; // 块级作用域
    }
    console.log(varVar); // "var"(可以访问)
    console.log(letVar); // 报错:letVar is not defined
    console.log(constVar); // 报错:constVar is not defined
}
scopeExample();

2. 变量提升(Hoisting)

关键字是否提升初始化值
var(声明提升,赋值不提升)undefined
let(但存在 暂时性死区未初始化
const(但存在 暂时性死区必须初始化
console.log(a); // undefined(var 提升)
var a = 10;

console.log(b); // 报错:Cannot access 'b' before initialization(let 提升但未初始化)
let b = 20;

console.log(c); // 报错:Cannot access 'c' before initialization(const 提升但未初始化)
const c = 30;

3. 重复声明

关键字是否允许重复声明
var允许(会覆盖)
let不允许(报错)
const不允许(报错)
var x = 10;
var x = 20; // 允许

let y = 10;
let y = 20; // 报错:Identifier 'y' has already been declared

const z = 10;
const z = 20; // 报错:Identifier 'z' has already been declared

4. 可变性(Reassignment)

关键字是否可重新赋值是否可变(对象/数组)
var可以可以修改
let可以可以修改
const不可以(但对象/数组内容可修改)可以修改
var a = 10;
a = 20; // 允许

let b = 10;
b = 20; // 允许

const c = 10;
c = 20; // 报错:Assignment to constant variable

// 但对象/数组可以修改内容
const obj = { name: "Alice" };
obj.name = "Bob"; // 允许
obj = {}; // 报错(不能重新赋值)

5. 最佳实践

关键字适用场景
const默认使用(推荐),适用于常量、对象、数组
let需要重新赋值时(如循环变量)
var避免使用(旧代码或特殊需求)
// 默认用 const
const PI = 3.14;
const user = { name: "Alice" };

// 需要重新赋值时用 let
let count = 0;
count++;

// 避免 var
var oldVar = "avoid"; // ❌ 不推荐

总结

特性varletconst
作用域函数作用域块级作用域块级作用域
提升是(初始 undefined是(暂时性死区)是(暂时性死区)
重复声明允许不允许不允许
重新赋值允许允许不允许(但对象/数组内容可变)
默认值undefined未初始化必须初始化

现代 JavaScript 开发建议

  1. 优先使用 const(默认选择)。
  2. 需要重新赋值时用 let
  3. 避免使用 var(除非维护旧代码)。

⚠️以上内容部分源于大模型,如有雷同,联系修改

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值