let a = a 会是什么结果 为什么?

Uncaught ReferenceError: a is not defined
分为2个阶段:

  1. 在预编译阶段,将let声明的变量放到暂存性死区TDZ中 TDZ=[a]

  2. 当let声明语句结束之后,这里的结束指的是,当let a = a执行完事后,会把a从TDZ拿出来。
    但是let a = a执行的时候,右侧赋值的a还在TDZ中,所以报错。也就是未声明就使用的错误。

所以,大家在使用let变量时,切记一定要先声明后使用

ES6 let与块级作用域
块级作用域

  • 什么叫块级作用域?除了对象字面量上的大括号 都叫块级作用域
    例:{
    //产生TDZ[]
    var a=10;
    let b=100;
    //TDZ结束
    }
    console.log(a); 10
    console.log(b); 报错
    for循环也是
    let 具有识别块级作用域的能力

  • 不存在变量提升
    console.log(str); 报错 typeof也不好使
    let str=10;
    在预编译过程中 let 暂时性死区(TDZ tempral dead zone)

js扫码的时候

  1. var整体提升
  2. let a=1; let a放入一个暂时性死区 ,如果使用变量的时候 在TDZ中发现变量在里面就报错
    当执行到let a =1;释放出来
  3. 统领当前作用域
    先定义 再使用
  • 不能重复定义
    let a = 'xn'
    let a = 'xx' 报错 已经被定义

你可能感兴趣的:(let a = a 会是什么结果 为什么?)