let
- 允许你声明⼀个作⽤域被限制在块级中的变量、语句或者表达式
- let 绑定不受变量提升的约束,这意味着 let 声明不会被提升到当前
- 该变量处于从块开始到初始化处理的“暂存死区”
-
function example() { let x = 10; if (true) { let x = 20; console.log(x); // Output: 20 } console.log(x); // Output: 10 } example();
var
- 声明变量的作⽤域限制在其声明位置的上下⽂中,⽽⾮声明变量总是全局的
- 由于变量声明(以及其他声明)总是在任意代码执⾏之前处理的,所以在代码中的任意位置
- 声明变量总是等效于在代码开头声明
-
function example() { var x = 10; if (true) { var x = 20; console.log(x); // Output: 20 } console.log(x); // Output: 20 } example();
const
- 声明创建⼀个值的只读引⽤ (即指针)
- 基本数据当值发⽣改变时,那么其对应的指针也将发⽣改变,故造成 const 申明基本数据类型时
- 再将其值改变时,将会造成报错, 例如 const a = 3 ; a = 5 时 将会报错
- 但是如果是复合类型时,如果只改变复合类型的其中某个 Value 项时, 将还是正常使⽤
-
function example() { const x = 10; if (true) { const x = 20; console.log(x); // Output: 20 } console.log(x); // Output: 10 } example();
使⽤ let 关键字声明的变量 x 具有块级作⽤域,它的作⽤范围仅限于 if 语句块内部。⽽使⽤ var 关键字声明的变量 x 则具有函数级作⽤域,它的作⽤范围在整个函数内部都可⻅。
对于 const 关键字声明的变量 x ,它创建了⼀个只读的引⽤,也就是说它的值不能被修改。 在示例中, const x = 10 声明了⼀个常量 x ,⽽在 if 语句块内部再次使⽤ const x = 20 声明了⼀个新的常量 x ,它的作⽤范围也仅限于 if 语句块内部。
let 关键字声明的变量具有块级作⽤域,不会被提升,存在暂存死区。
var 关键字声明的变量具有函数级作⽤域,会被提升到当前作⽤域的顶部。
const 关键字声明的变量创建⼀个只读的引⽤,其值不可修改,但对于复合类型的变量,可以修改其属性或元素的值