以此为例。
if (b) b = 1;
参考错误。 b未定义。有道理,但如果我这样做......
if (b) var b = 1;
我在控制台中未定义。现在,当我查看它是什么时,它显示为未定义。
如果我尝试再次执行相同的if语句,它不会传递,因为b既不是真或假,它是未定义的,但我想我的问题是为什么它显示为未定义?无论if语句是通过还是失败,Javascript都会通过if语句吗?感谢。
答案 0 :(得分:3)
所有var
被提升到他们所在范围的开头,将其值初始化为undefined
。然后在执行到达var
最初的行时设置该值。
在您的第二个示例中,由于b
,undefined
在遇到if
之前被初始化为var
。可以认为它与编写以下内容相同
var b;
if (b) b = 1;
执行此代码后,b
仍为undefined
,因为它永远不会进入if
块,因为初始值为 falsy 。< / p>
如pst所述,这是JavaScript的特定于语言的功能,因此在使用其他语言编写代码时不要指望相同的行为。
答案 1 :(得分:0)
JS不是通过if语句,而是它正在读取语句的if
部分,并且由于b
没有在if
语句中的任何地方定义,所以你得到undefined
。