【发布时间】:2013-01-23 22:09:41
【问题描述】:
以这个为例。
if (b) b = 1;
参考错误。 b 未定义。有道理,但如果我这样做......
if (b) var b = 1;
我在控制台中未定义。现在当我查看 b 是什么时,它显示为未定义。
如果我再次尝试执行相同的 if 语句,它不会通过,因为 b 既不是真也不是假,它是未定义的,但我想我的问题是为什么它显示为未定义?无论 if 语句通过还是失败,Javascript 是否都会通过 if 语句?谢谢。
【问题讨论】:
-
var被提升,所以b在作用域的开头被初始化为undefined。把它想象成var b; if (b) b = 1;。 -
Paul 所说的,vars 被提升了,显而易见的事情是声明你的变量之前你检查它们是否真实/虚假。
-
Puzzled by this JavaScript code snippet 的可能重复项(如果您理解这个问题/答案,那么您就会明白它为什么会这样工作)
-
stackoverflow.com/questions/13427311/… - 条件中
var的另一个示例。 -
@aug 这非常特定于语言,就像一般范围规则一样。 (JavaScript 作用域有点类似于 Python,但在 Python 中必须声明全局变量,而不是局部变量;JavaScript 作用域有点类似于 Ruby,但 Ruby 要求变量在使用前以左值的形式出现,并且不链接到“全局”作用域; JavaScript 作用域与 C/Java 不太相似,C/Java 中的每个块都引入了一个新的作用域,并且必须提前声明变量,等等 ..)
标签: javascript variables if-statement