以此为例。
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 语句?谢谢。
所有vars 都被提升到它们所在范围的开头,将它们的值初始化为undefined. var然后在执行到达最初所在的行时设置该值。
在您的第二个示例b中undefined,if由于var. 认为它与编写以下内容相同
var b;
if (b) b = 1;
这段代码执行后,b仍将是undefined因为它永远不会运行到if块中,因为初始值为falsy。
正如pst所提到的,这是 JavaScript 的语言特定功能,因此在用其他语言编写代码时不要期望相同的行为。
JS 不会通过 if 语句,而是读取if语句的一部分,并且由于b没有在任何地方定义,而是在if语句中,所以你得到undefined.