-
let 命令所声明的变量,只在let命令所在的代码块内有效。var命令声明的,在全局范围内都有效。
-
let 不存在变量提升,声明的变量一定要在声明后使用,否则报错。var 命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。
-
let 会发生暂时性死区。暂时性死区是只要块级作用域内存在let命令,它所声明的变量就绑定这个区域,不再受外部的影响。在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
-
let 不允许重复声明。var 可以重复声明。
-
let 为 JavaScript 新增了块级作用域。
-
let 命令、const 命令、class 命令声明的全局变量,不属于顶层对象的属性。var 命令和 function 命令声明的全局变量,是顶层对象的属性;顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。