JavaScript 中有一个提升机制,就是无论你在哪里使用 var
关键字声明变量,它都会被提升到当前作用域的顶部。使用 var
关键字声明的变量可以重复赋值,但在某些情况下会造成一些问题。使用 var
关键字定义的变量只有两种作用域,全局作用域和函数作用域,两者均不是块结构,
认识 let 关键字
let 关键字,它解决了变量提升到作用域顶部的问题。因为它的作用域是块,而不是提升机制了。
解决变量重复声明的问题
虽然 let
关键字声明的变量可以重新赋值,但是它与 var
关键字有所不同,let
关键字不能在同一作用域内重新声明,而 var
可以。
认识 const 关键字
对于 const
关键字定义的变量值,不可改变在于两个方面:
1. 值类型
值类型是指变量直接存储的数据,例如:
const num = 20;
这里 num
变量就是值类型,我们使用的是 const
关键字来定义 num,故赋予变量 num
的值 20 是不可改变的。
2. 引用类型
引用类型是指变量存储数据的引用,而数据是放在数据堆中,比如,用 const 声明一个数组。
const arr = ["一", "二", "三"];
但是,使用 const
关键字定义的引用类型还是可以通过数组下标去修改值 ⭐️。
例如:
const arr = ["一", "二", "三"];
arr[0] = "四";
arr[1] = "五";
arr[2] = "六";
console.log(arr);
在控制台会显示:
需要记住使用 const 关键字声明的是常量,必须赋初始值,并且不能在同一作用域内重新声明,也无法重新赋值。
const、let、var 三者之间的区别:
- var 语句的作用域是函数作用域或者全局作用域;它没有块作用域,故不存在暂时死区;它可分配,也可重复性声明。
- let 语句属于块作用域,受到暂时死区的约束;它可分配,但不可重新声明。
- const 语句也属于块作用域,同样受到暂时死区的约束;它既不可重新分配,也不可重新声明。