下一个代码在Google-chrome控制台中解释:
a = 123
123
% Ok!
var b = 123
undefined
% `undefined`? why? b is not undefined, it contains `123`.
答案 0 :(得分:2)
var
是一个声明。语句没有值,因此eval()
(控制台调用)返回undefined
。
a = 123
是一个简单的表达式,它返回123
(这样你就可以写b = a = 123
)。传递表达式时,eval()
将返回表达式的值。
答案 1 :(得分:2)
我认为你在控制台中这样做,向你展示操作的结果。
赋值表达式的结果是已分配的值。但是var
语句不会 结果,尤其是因为它们不会在通常的逐步代码流程中出现。我们可以在规范中var
语句的定义中看到这一点:§13.3.2.4告诉我们var
的结果是抽象规范调用NormalCompletion(empty)
,它是{{ 3}} Completion{[[type]]: normal, [[value]]: argument, [[target]]:empty}
用于just an alias。在这种情况下,它完成没有任何价值。 (令人惊讶的是,并非所有JavaScript语句都是如此。)