欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > var、let、const区别

var、let、const区别

2025/2/22 2:09:37 来源:https://blog.csdn.net/weixin_50756332/article/details/145736964  浏览:    关键词:var、let、const区别

在 JavaScript 中,varlet 和 const 是用于声明变量的关键字,但它们的作用域、提升行为以及可变性等方面有显著区别。以下是它们的详细对比:


1. var

  • 作用域:

    • var 声明的变量是函数作用域(function-scoped),即在函数内部声明的变量只能在函数内部访问。

    • 如果在函数外部声明,则为全局作用域。

  • 提升(Hoisting):

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

    • 在声明之前访问变量会得到 undefined

  • 重复声明:

    • 允许重复声明同一个变量,不会报错。

  • 示例:

    function example() {console.log(x); // undefined (变量提升)var x = 10;console.log(x); // 10
    }
    example();

2. let

  • 作用域:

    • let 声明的变量是块级作用域(block-scoped),即只在 {} 代码块内有效。

    • 适用于循环、条件语句等块级作用域场景。

  • 提升(Hoisting):

    • let 声明的变量也会被提升,但不会初始化,访问时会抛出 ReferenceError(暂时性死区,TDZ)。

  • 重复声明:

    • 不允许在同一个作用域内重复声明同一个变量。

  • 示例:

    if (true) {let y = 20;console.log(y); // 20
    }
    console.log(y); // ReferenceError: y is not defined

3. const

  • 作用域:

    • const 声明的变量也是块级作用域(block-scoped)。

  • 提升(Hoisting):

    • 与 let 类似,const 声明的变量也会被提升,但不会初始化,访问时会抛出 ReferenceError

  • 可变性:

    • const 声明的变量必须初始化,且不能重新赋值。

    • 如果变量是对象或数组,其属性或元素可以修改,但变量本身不能重新赋值。

  • 重复声明:

    • 不允许在同一个作用域内重复声明同一个变量。

  • 示例:

    const z = 30;
    z = 40; // TypeError: Assignment to constant variableconst obj = { a: 1 };
    obj.a = 2; // 合法,修改属性
    obj = {}; // TypeError: Assignment to constant variable

4. varlet 和 const 的区别

(Temporal Dead Zone,暂时性死区) 

特性varletconst
作用域函数作用域块级作用域块级作用域
提升变量提升,初始化为 undefined变量提升,但不初始化(TDZ)变量提升,但不初始化(TDZ)
重复声明允许不允许不允许
可变性可以重新赋值可以重新赋值不可重新赋值(对象属性可修改)
适用场景旧代码兼容需要块级作用域的变量需要不可变的常量

5. 使用建议

  • 避免使用 var:

    • var 的作用域和提升行为容易导致 bug,现代 JavaScript 开发中建议避免使用。

  • 优先使用 const:

    • 如果变量的值不需要改变,优先使用 const,以确保变量的不可变性。

  • 必要时使用 let:

    • 如果变量的值需要改变,使用 let


6. 总结

  • var:

    • 函数作用域,变量提升,允许重复声明。

  • let:

    • 块级作用域,变量提升但不初始化,不允许重复声明。

  • const:

    • 块级作用域,变量提升但不初始化,不允许重复声明,不可重新赋值。

根据实际需求选择合适的变量声明方式,可以提高代码的可读性和可维护性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词