定义 var 时抛出 undefined

undefined thrown when defining var

下一段代码在Google-chrome控制台解释:

a = 123
123
     % Ok!

var b = 123
undefined
     % `undefined`? why? b is not undefined, it contains `123`.

var 是一个语句。语句没有价值,所以 eval()(控制台调用)returns undefined.

a = 123是一个简单的表达式,其中returns123(这样就可以写成b = a = 123)。传递表达式时,eval() returns 表达式的值。

我认为您是在显示操作结果的控制台中执行此操作。

赋值表达式的结果是被赋值的值。但是 var 语句不会 结果,尤其是因为它们不会出现在通常的分步代码流中。我们可以在规范中 var 语句的定义中看到这一点:§13.3.2.4 tells us that the result of var is the abstract specification call NormalCompletion(empty), which is just an alias for Completion{[[type]]: normal, [[value]]: argument, [[target]]:empty} which is for indicating how a statement/expression completed。在这种情况下,它完成时没有任何价值。 (令人惊讶的是,并非所有 JavaScript 陈述都是如此。)