为什么在if(false)语句中读取了代码?

时间:2016-08-14 22:05:10

标签: javascript

我想要实现的目标:如果出现问题(if (false)),请重新定义对象A。然后,创建新变量a以分配给A

class A {

}
class B {
  
}
class C {
  constructor() {
    if (false) {
      console.log('hit'); // never hit to
      var A = B
    }
    var a = A; 
    console.log(a) // undefined
  }
}
var c = new C();

我不确定行var A = B是否已执行,但如果删除if语句,console.log(a)会打印出来:

class A {

}

我的问题:为什么我会在undefined行中找到console.log(a)

1 个答案:

答案 0 :(得分:6)

函数中的所有var语句,无论它们出现在何处,都被视为它们出现在函数的顶部。因此,您的函数被解释为完全如下:

class C {
  constructor() {
    var a, A;
    if (false) {
      console.log('hit'); // never hit to
      A = B
    }
    a = A; 
    console.log(a) // undefined
  }
}

因此,因为变量aAvar声明中的构造函数中出现某处,所以它们在整个函数中被声明。在var声明实际出现的地方评估声明变量的初始化