定义 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 陈述都是如此。)
下一段代码在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 陈述都是如此。)