JS输出


题目

输出是什么

// 1.
var a = 1
if (true) {
  console.log(a) // 1
  var a = 2
}
// 2.
var a = 1
if (true) {
  console.log(a)
  let a = 2
}

考察点:

  • 变量提升
  • 暂时性死区
  • 块级作用域

分析

第一题提升后的代码为

var a
a= 1;
if (true) {
    console.log(a);
    a = 2;
}

变量提升会提升到最近的函数的作用域内而非最近的块级 if 作用域内

第二题

因为存在块级作用域和 let 语法,提前调用了 let 声明变量触发暂时性死区,所以报错

核心:

  1. 变量提升提升到哪

    函数顶层而非块级作用域顶层

  2. 暂时性死区的真正理解,

    如果内部块级作用域内使用了 let,即使外部作用域也声明了该变量也不能提前使用该变量

输出结果:

1
Uncaught ReferenceError: Cannot access 'a' before initialization

文章作者: 高红翔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 高红翔 !
  目录