ES6 学习笔记之新的语法特性

本文记录一些与 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 等新增变量声明的关键字脱离了顶层对象的关系,不再互相干扰。

发表评论