JavaScript中var, let和const声明变量有何不同?

在JavaScript中,变量可以使用varletconst来声明。var是函数作用域,可以重复声明,存在变量提升;let是块级作用域,不能重复声明,不存在变量提升;const也是块级作用域,不能重复声明且必须立即赋值,常用于声明常量。

JavaScript中有三种主要的变量声明方式:var、let和const,它们在作用域、提升(hoisting)以及是否可以重新赋值等方面有所不同。

JavaScript中var, let和const声明变量有何不同?
(图片来源网络,侵删)

1. var

作用域: var声明的变量是函数作用域或全局作用域,取决于在哪里声明。

提升: var声明的变量会被提升到其作用域的顶部,但只提升声明,不提升赋值。

重新赋值: 可以重新赋值。

function exampleVar() {
    console.log(a); // undefined, 因为变量提升,但未赋值
    var a = 5;
    console.log(a); // 5
    a = 10;
    console.log(a); // 10
}
exampleVar();

2. let

JavaScript中var, let和const声明变量有何不同?
(图片来源网络,侵删)

作用域: let声明的变量是块级作用域,只在声明它的代码块内有效。

提升: 不存在变量提升,必须在声明后使用。

重新赋值: 可以重新赋值。

function exampleLet() {
    if (true) {
        let b = 10;
        console.log(b); // 10
        b = 20;
        console.log(b); // 20
    }
    // console.log(b); // Error, b is not defined
}
exampleLet();

3. const

作用域: const声明的变量也是块级作用域。

JavaScript中var, let和const声明变量有何不同?
(图片来源网络,侵删)

提升: 不存在变量提升,必须在声明后使用。

重新赋值: 不可以重新赋值,但如果是对象或数组,它们的属性或元素可以被修改。

function exampleConst() {
    const c = 30;
    console.log(c); // 30
    // c = 40; // Error, cannot reassign constant variable
    const obj = { key: 'value' };
    obj.key = 'new value'; // Allowed, object properties can be modified
    console.log(obj); // { key: 'new value' }
}
exampleConst();

相关问题与解答

1、问题:varlet/const之间的区别是什么?

答案:var声明的变量存在变量提升,并且没有块级作用域;而letconst不存在变量提升,具有块级作用域,且const声明的变量不能被重新赋值。

2、问题:letconst有什么区别?

答案:let允许重新赋值,而const不允许重新赋值。const声明时必须立即初始化,而let可以在声明后再进行初始化。