一、let
1.let只在当前代码块有效,拥有块级作用域。
2.let 不存在变量提升。
3.变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量。
![]()
二、const
1.const声明一个只读的常量。一旦声明,常量的值就不能改变,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
2.const声明变量的值是可改变的,只是变量指向的那个内存地址不可改变。
三、
1.ES5 只有两种声明变量的方法:var命令和function命令。ES6 除了添加let和const命令,另外两种声明变量的方法:import命令和class命令。
2.var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

