let声明的是一个常量,必须在创建的时候就赋值,否则报错。赋值后不可更改,但如果声明的let是一个对象,对于let对象的内在元素则是可以修改的。
var 声明的是一个变量,但作用域会不同:
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
上面代码中,变量i
是var
声明的,在全局范围内都有效,所以全局只有一个变量i
。每一次循环,变量i
的值都会发生改变,而循环内被赋给数组a
的function
在运行时,会通过闭包读到这同一个变量i
,导致最后输出的是最后一轮的i
的值,也就是10。
const声明的是一个只读的常量。一旦声明,常量的值就不能改变。const
的作用域与let
命令相同:只在声明所在的块级作用域内有效。
ES6文档链接:http://es6.ruanyifeng.com/#docs/let