let
一、块级作用域
块级作用域也称作词法作用域,存在于函数与块中{}
let只在块级作用域中存在,因此当你在不同块中使用同一个名字声明变量时,是在创建一个新的变量。
二、禁止重复声明
同一个块级作用域中,如果已经存在某个变量,此时再用let声明会出错。
三、临时死区
var声明的变量会应用变量提升机制:在函数作用域或全局作用域中,无论变量是在哪里声明的,都会被当成在当前作用域顶部声明的变量。
所以,当你在var声明的变量之前使用此变量,会得到未初始化的undefined
但是,你在let声明的作用域中,在声明之前使用let声明的变量会报错。
let没有变量提升。
四、全局作用域绑定
当你用var声明全局变量时,这个变量会作为全局对象(浏览器环境中的window)的属性,因此可能会覆盖已经存在的全局属性。
而使用let声明的变量只会遮蔽已经存在的全局属性,并不会覆盖,你可以使用window.属性
来使用已存在的全局属性。
const
const与let基本相同,区别有两点:
1、const声明的同时必须初始化,赋初值。
2、const不能重新赋值。
const可以用来声明对象,因为const不允许修改绑定,但允许修改值。
使用
默认使用const,当需要改变变量的值时,使用let