<<深入理解ES6>>记:一

ECMAScript之路

1.新增的语言特性涉足甚广, 包括: 模块,类,类继承,私有对象成员,可选类型注释等特性

第1章 块级作用域绑定

1.块级作用域(亦被称为词法作用域) 存在于:

  • 函数内部
  • 块中, 即{}之间的区域

2.let声明不会被提升(Hoisting)

3.通过const声明的常量必须进行初始化;
与其他语言中的常量不同的是,JavaScript中的常量如果是对象,则对象中的值可以修改.

4.JavaScript引擎在扫描代码发现变量声明时,要么将它们提升至作用域顶部(遇到var声明),要么将声明放大TDZ中(遇到let和const)

注释: TDZ(temporal dead zone),临时死区

栗子一:
    if(codition) {
        console.log(typeof value);     // 引出错误
        let value = 'blue';
    }
栗子二:
    console.log(typeof value);
    if(conditon) {
        let value = 'blue';
    }   

5.循环中的块级作用域绑定

  • 为解决这个问题, 开发者在循环中使用立即执行函数表达式(IIFE),以强制生成计数器变量的副本
  • 使用let声明能够更快速的解决(在for,for-in,for-of循环情况一样,生成变量副本)
  • 循环中使用const,普通for会抛出错误(更新循环变量); 在for-in,for-of不会出错,因为每次迭代中不会修改已有绑定,而是会创建一个新绑定

6.全局块作用域绑定
如果不想为全局对象创建属性,则使用let和const要安全很多

var item = 'hello';
console.log(window.item === item);  // true
let item = 'hello';
console.log(window.item === item);  // false

7.当前使用块级绑定的最佳实践是: 默认使用const, 只在确定需要改变变量的值时使用let

你可能感兴趣的:(<<深入理解ES6>>记:一)