JavaScript-FAQ-var/const/let
1 需求
2 接口
在
JavaScript
中,const
、let
和var
都是用于声明变量的关键字,它们之间有以下几个方面的区别:
- 块级作用域:
const
和let
关键字都是块级作用域,而var
关键字是函数作用域。- 变量提升:
var
关键字具有变量提升的特性,而const
和let
关键字不具有变量提升的特性。在使用var
关键字声明变量时,变量声明会被提升到作用域顶部,因此可以在变量声明之前访问变量;而在使用const
和let
关键字声明变量时,访问未声明和未初始化的变量会抛出ReferenceError
异常。- 重复声明:使用
var
关键字声明的变量可以在同一作用域内重复声明,而使用const
和let
关键字声明的变量在同一作用域内不能重复声明。- 赋值:使用
const
关键字声明的变量必须在声明时进行初始化,并且初始化后不能再修改变量的值;而使用let
关键字声明的变量可以在声明后重新赋值。
3 示例
在JavaScript中,
var
、let
和const
是用于声明变量的关键字,但它们之间存在一些重要的区别。以下是它们之间的主要区别:
作用域(Scope):
var
声明的变量具有函数作用域(function-scoped)或全局作用域(global-scoped),这意味着它们可以在整个函数或全局范围内被访问。如果在函数内部使用var
声明一个变量,那么该变量将只在该函数内部可访问,但如果在全局作用域中声明,则它将在整个脚本中可访问。let
和const
声明的变量具有块级作用域(block-scoped),这意味着它们只在声明它们的代码块(例如大括号{}
内)中可访问。这允许更精细地控制变量的可见性和生命周期。变量提升(Variable Hoisting):
- 使用
var
声明的变量存在变量提升(hoisting)现象。这意味着在声明之前,变量会被提升到其所在作用域的顶部,但此时变量的值为undefined
。- 使用
let
和const
声明的变量不存在变量提升,这意味着在声明之前引用这些变量会导致一个引用错误(ReferenceError)。重新声明和重新赋值:
- 使用
var
声明的变量可以被重新声明和重新赋值。- 使用
let
声明的变量也可以被重新赋值,但不能被重新声明(在同一个作用域内)。- 使用
const
声明的变量是常量,它们的值不能被重新赋值。但是,如果const
变量引用的是一个对象或数组,那么你可以修改该对象或数组的内部属性或元素,但不能重新分配引用到一个新的对象或数组。暂时性死区(Temporal Dead Zone):
- 使用
let
和const
声明的变量在声明之前的区域(即暂时性死区)内是不可访问的。如果你试图在声明之前访问这些变量,将会抛出一个引用错误(ReferenceError)。全局对象的属性:
- 使用
var
在全局作用域中声明的变量会成为全局对象(在浏览器中是window
对象)的属性。- 使用
let
和const
在全局作用域中声明的变量不会成为全局对象的属性。重复声明:
- 在同一作用域内,你不能使用
let
或const
重复声明同一个变量。- 使用
var
可以在同一作用域内重复声明同一个变量,但这样做通常是不好的编程实践,因为它可能会导致意外的行为。总之,
let
和const
提供了比var
更严格和更可预测的作用域和变量提升行为,因此在编写现代JavaScript代码时,推荐使用let
和const
来声明变量。
4 参考资料
https://zhuanlan.zhihu.com/p/644885881
原文地址:https://blog.csdn.net/pwp032984/article/details/140350900
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!