ECM6学习总结 ECMAScript 6 入门
let
声明变量用,类似var.只在代码块内有效.
1234567{let a = 10;var b = 1;}a // ReferenceError: a is not defined.b // 1不存在变量提升,声明变量一定要再声明后使用否则会报错
暂时性死区(temporal dead zone,简称 TDZ)
1234567891011if (true) {// TDZ开始tmp = 'abc'; // ReferenceErrorconsole.log(tmp); // ReferenceErrorlet tmp; // TDZ结束console.log(tmp); // undefinedtmp = 123;console.log(tmp); // 123}不允许在相同作用域内,重复声明同一个变量
- 注意:ES6的块级作用域允许声明函数的规则,只在使用大括号的情况下成立。
const
const
声明一个只读的常量。一旦声明,常量的值就不能改变。- 只在声明所在的块级作用域内有效
- 实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动
- 对于
复合类型的数据
(主要是对象和数组),变量指向的内存地址,保存的只是一个指针 - 如果真的想将对象冻结,应该使用Object.freeze方法。1234const foo = Object.freeze({});// 常规模式时,下面一行不起作用;// 严格模式时,该行会报错foo.prop = 123;
变量的解构赋值
|
|
- 如果解构不成功,变量的值就等于undefined
- 如果是不完全解构,值匹配部分数组也是可以的
- 只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值
- 解构赋值允许指定默认值12345let [foo = true] = [];foo // truelet [x, y = 'b'] = ['a']; // x='a', y='b'let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
rest参数
(形式为:…变量名)
用于获取函数的多余参数
rest参数后不能再有其他参数(只能是最后一个参数)123456// 使用argument变量的写法function sortNumbers() { return Array.prototype.slice.call(arguments).sort();}// rest参数的写法const sortNumbers = (...numbers) => numbers.sort();