资料内容:
1.解释ES6引⼊的 let 和 const 与 var 的区别
ES6(ECMAScript 2015)引⼊了 let 和 const 这两个新的关键字来声明变量,与之前的 var 关键
字相⽐,它们提供了更严格的作⽤域规则和块级作⽤域。以下是 let 、 const 与 var 之间的主要
区别:
1. 块级作⽤域:
◦
var 声明的变量具有函数作⽤域或全局作⽤域,不具备块级作⽤域(即⼀对花括号 {} 内
部)。
◦
let 和 const 声明的变量具有块级作⽤域,这意味着它们只在其声明的代码块内可⽤。
2. 变量提升(Hoisting):
◦
使⽤ var 声明的变量存在变量提升(hoisting)现象,即变量声明会被提升到其所在作⽤域的
顶部。但变量的赋值仍然保留在原来的位置。
◦
let 和 const 声明的变量不存在变量提升,这意味着在声明之前访问这些变量会抛出
ReferenceError 。
3. 暂时性死区(Temporal Dead Zone, TDZ):
◦
在 let 或 const 声明的变量被初始化之前的区域被称为暂时性死区。尝试在暂时性死区内访
问这些变量会抛出 ReferenceError 。
4. 重新声明:
◦
使⽤ var 可以在同⼀作⽤域内多次声明同⼀个变量,⽽不会报错,但这样做会导致混淆和不可
预期的结果。
◦
let 和 const 不允许在同⼀作⽤域内重复声明同⼀个变量,否则会抛出 SyntaxError 。
5. 常量声明:
◦
var 和 let 都可以声明可变的变量。
◦
const ⽤于声明⼀个常量,其值在初始化后不能被重新赋值。但需要注意的是, const 声明
的变量指向的内存地址是不可变的,但如果该变量引⽤的是⼀个对象或数组,对象或数组内部
的值是可以改变的。
6. 全局作⽤域中的声明:
◦
在全局作⽤域中使⽤ var 声明的变量会成为全局对象的属性(在浏览器中是 window 对
象)。◦
使⽤ let 和 const 在全局作⽤域中声明的变量不会成为全局对象的属性,它们只存在于全局
作⽤域中。
通过引⼊ let 和 const ,ES6为JavaScript提供了更清晰的作⽤域规则和更安全的变量声明⽅式,
有助于减少因变量提升和全局变量污染导致的错误。