1、let 用于声明变量 在所在的代码块内有效
2、不存在变量提升
3、暂时性死区
4、不予许重复声明
5、
function f() { console.log('I am outside!'); }
(function () {
if (false) {
// 重复声明一次函数f
function f() { console.log('I am inside!'); }
}
f();
}())
上面代码在 ES5 中运行,会得到“I am inside!”,因为在if内声明的函数f会被提升到函数头部,
6、const声明一个只读的常量。一旦声明,常量的值就不能改变。
const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了
7、将对象彻底冻结的方法
var constantize = (obj) => {
Object.freeze(obj);
Object.keys(obj).forEach( (key, i) => {
if ( typeof obj[key] === 'object' ) {
constantize( obj[key] );
}
});
};
const foo = Object.freeze({});
8、es6 声明变量的6种方法
var 、function 、let、const、import、class
let、const、class 定义的变量不属于顶层变量
9、// ES6模块的写法
import getGlobal from 'system.global';
const global = getGlobal();