我想要实现的目标:如果出现问题(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)
?
答案 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
}
}
因此,因为变量a
和A
在var
声明中的构造函数中出现某处,所以它们在整个函数中被声明。在var
声明实际出现的地方评估声明变量的初始化。