ES6 学习笔记之新的语法特性
- 2020 年 1 月 6 日
- 筆記
本文记录一些与 ES5 不同的语法特性,因为只记录了我比较关心的内容,所以记录的可能不全面。
块级作用于
{{{{ {let insane = 'Hello World'} console.log(insane); // 报错 }}}};
由于 let insane 的声明在一个大括号中,出了这个大括号,变量 insane 就无法访问了,所以下面的 console.log 打印 insane 报错了,而在 ES5 中是不成立的。再来一个案例:
function f() { console.log('I am outside!'); } (function () { if (false) { // 重复声明一次函数f function f() { console.log('I am inside!'); } } f(); }());
以上的代码在 ES5 环境中运行,由于函数 f 被重复声明,具有提升效果后,后面的 f 函数提升到了函数头部,所以调用时调用的是已经被提升到函数头部的 f 函数,那么 ES5 中会输出 I am inside,而 ES6 中,由于块级作用域的问题,则会输出 I am outside。但注意,我们现在是在 node 环境下,而如果在浏览器环境下“块级作用域内声明的函数,行为类似于 var 声明的变量。”,会有提升到函数作用域的头部,具体请看书中解释。
顶层对象的属性
var a = 1; // 如果在Node的REPL环境,可以写成global.a // 或者采用通用方法,写成this.a window.a // 1 let b = 1; window.b // undefined
上面代码中描述了 var 和 let 与顶层对象之间的关系,ES6 中,let 和 const 等新增变量声明的关键字脱离了顶层对象的关系,不再互相干扰。