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