ES6第二章学习

ES6第二章

let命令
ES6新增了let命令,用来生命变量,但是所声明的变量,旨在let命令所在的代码块内有效
ES6第二章学习
不存在变量提升
var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined,但是使用let声明的变量一点要在声明后使用
ES6第二章学习
暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。ES6第二章学习
不允许重复声明
let不允许在相同作用域内,重复声明同一个变量。
ES6第二章学习

2、块级作用域
let实际上为 JavaScript 新增了块级作用域

ES6第二章学习

const命令

  • const声明一个只读的常量。一旦声明,常量的值就不能改变。
  • const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,
  • const声明的常量,也与let一样不可重复声明。
  • const的作用域与let命令相同:只在声明所在的块级作用域内有效。
  • const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

4、顶层对象的属性
顶层对象,在浏览器环境指的是window对象,在 Node 指的是global对象。ES5 之中,顶层对象的属性与全局变量是等价的。
ES6第二章学习
ES6 为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。

5、global对象

  • 浏览器里面,顶层对象是window,但 Node 和 Web Worker 没有window。
  • 浏览器和 Web Worker 里面,self也指向顶层对象,但是 Node 没有self。
  • Node 里面,顶层对象是global,但其他环境都不支持。
  • 全局环境中,this会返回顶层对象。但是,Node 模块和 ES6 模块中,this返回的是当前模块。