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