标签 es6 下的文章

ES6部分总结


var、let、const 比较

var 会有声明提升,并初始化为 undefined

console.log(a)  //  undefined
var a = 1
console.log(a)  //  1

console.log(b)  //  Uncaught ReferenceError: b is not defined
b = 3
console.log(b)  //  3
console.log(window.b)  //  3

疑问:

  • 为什么打印 b 会报错?
  • 为什么 window.bb 结果是一样的?


ES6之let声明


  • let 的「创建」过程被提升了,但是初始化没有提升,不允许重复声明。
  • var 的「创建」和「初始化」都被提升了。
  • TDZ 暂时死区,就是不能在初始化之前,使用变量。
let x = 'global'
{
  console.log(x) // Uncaught ReferenceError: x is not defined
  let x = 1
}

console.log(x)报错了,说x没有被定义,说明x指向的是let x = 1声明的x,而不是块代码外的x变量
这就说明了let x = 1声明提升了,你觉得代码应该是这样的:

let x = 'global'
{
  let x
  console.log(x) // Uncaught ReferenceError: x is not defined
  x = 1
}