let
let是ES6中新增的用于声明变量的关键字,它声明的变量只在所处于的块级有效。
块级作用域的意思就是大括号{ }包含的范围。
注意:使用let关键字声明的变量才具有块级作用域,使用var声明的变量不具备块级作用域特性。
使用let的好处:
1.防止内部变量覆盖外部变量。
2.防止循环变量变成全局变量。(每次循环都会产生一个块级作用域)
使用let关键字声明的变量只能先声明再使用,不存在变量提升。
console.log(a); // a is not defined
let a = 20;
使用let关键字声明的变量具有暂时性死区的特性,let声明的变量会和块级区进行绑定,不会受外部同名变量影响。
var tmp = 123;
if (true) {
tmp = 'abc'; //会报错说tmp未定义
let tmp;
}
const
作用:声明常量,常量就是值(内存地址)不能变化的量。
如果声明的常量是基本数据类型,那么它的值是不可以更改的。如果声明的常量是复杂数据类型,比如说对象,那么这个常量就一定要指向这个对象,但是对象里面的属性值是可以更改的。
const声明的常量具有块级作用域特点。
注意:const声明常量时候必须赋值。
const PI; // Missing initializer in const declaration
一般函数定义、数学中恒定不变的值用const。
JavaScript解析引擎不用实时监控const值的变化,所以效率要比let关键字效率高。
let、const、var 的区别
- 使用 var 声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。
- 使用 let 声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。
- 使用 const 声明的是常量,在后面出现的代码中不能再修改该常量的值。
var | 函数作用域 | 变量提升 | 值可更改
let | 块级作用域 | 不存在变量提升 | 值可更改
const | 块级作用域 | 不存在变量提升 | 值不可更改