一、let

  ①声明变量 let a = 1;

  ②只在所在代码块内有效,不影响块以外

  ③不存在变量提升(不能先用后声明)

  ④暂时性死区

    let声明的变量“绑定”这个区域,不受外部影响。

    let声明之前,都是这个变量的‘死区’

    注:typeof在死区是ReferenceError,没声明是“undefined”

  ⑤不能重复声明同一个变量

二、块级作用域

  ① 允许块级作用域的任意嵌套,外层作用域无法读取内层作用域的变量,内层作用域可以定义外层作用域的同名变量 

// IIFE 写法
(function () {
var tmp = ...;
...
}()); // 块级作用域写法
{
let tmp = ...;
...
}

  ②允许在块级作用域之中声明函数(不建议使用,浏览器环境不同,差异大)

  ③do表达式(得到块级作用域的返回值)

let x = do {
let t = f();
t * t + 1;
};

三、const

  ①声明一个只读的常量。一旦声明,常量的值就不能改变。

  ②不能只声明不赋值

  ③只在声明所在的块级作用域内有效

  ④存在暂时性死区,只能在声明的位置后面使用

  ⑤不可重复声明

  ⑥本质:const实际上是保证变量指向的内存地址不得改动,不是变量值不能改(对象和数组)

  ⑦es6六种声明变量方法:var,function,let,const,import,class

四、顶层对象的属性

  ①顶层对象:浏览器 --> window对象 Node --> global对象

  ②var命令和function命令声明的全局变量,属于顶层对象的属性;
     let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性

五、global对象

  ①顶层对象不一定总能取到,system.global让global作为顶层对象,让它在各种环境下都存在。

05-26 21:21