为什么if (false)语句中的代码被读取

Why had code inside if (false) statement been read?

本文关键字:代码 读取 语句 if false 为什么      更新时间:2023-09-26

我想要实现的:如果出现问题(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 {
}

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

函数中的所有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声明实际出现的地方求值。