ES601
var let const
var
- 在全局作用域声明
- 存在变量提升
- 可以对变量进行重载
1 | //虽然a的变量得到提升,但是是未赋值的,因此输出undefined |
let
只在块作用域内有效,块作用域外访问报错
只能声明一次
存在暂时性死区(temporary died zone)
1
2
3
4
5
6
7
8
9
10if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ结束
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
const
指定义一个常量,且定义时必须赋值
只在块作用域内有效
循环计数器(var与let)
1 | for (var i = 0; i < 10; i++) { |
变量i
是var
命令声明的,在全局范围内都有效,所以全局只有一个变量i
。也就是说,所有数组a
的成员里面的i
,指向的都是同一个i
,导致运行时输出的是最后一轮的i
的值,也就是 10。
变量i
是let
声明的,当前的i
只在本轮循环有效,所以每一次循环的i
其实都是一个新的变量,所以最后输出的是6
。
顶层对象的属性
用var和function声明的变量,都是顶层对象windows的属性。而let、const声明的属性不再是顶层对象的属性。
1 | var a = 1; |
解构赋值
是对赋值运算的一种扩展,是代码简洁易读,针对的对象是数组和对象
1 | let node = { |
1 | //完全解构 |
扩展的对象功能
1 | const name = "空羽", |
Symbol
新的原始数据类型,最大的用途:用于定义对象的私有变量
1 | const name = Symbol('name'); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 blog!