在 Javascript 中:为什么 var a, b = 3 return 未定义而 b = 3 没有?

In Javascript: why does var a, b = 3 return undefined while b = 3 does not?

MDN中描述了逗号运算符:

The comma operator evaluates each of its operands (from left to right) and returns the value of the last operand.

但是为什么

var a, b = 3

return undefined,而表达式

b = 3

会return3,不是吗?

var a, b = 3;

同下:

var a;
var b = 3;

变量声明(var 关键字)不是表达式。变量声明中的逗号更类似于函数参数列表中的逗号。他们什么都不return。

逗号运算符 return 确实是最后一项,但我不确定它是否有任何实际用例(在 for 循环初始化之外)。

> 1, 2, 3
< 3

The page you linked to其实解释得很好

这个:

var a, b = 3;

是一个VariableStatementVariableStatement "normal completion" 至 empty 中的评估:

  1. Let next be the result of evaluating VariableDeclarationList.
  2. ReturnIfAbrupt(next).
  3. Return NormalCompletion(empty).

这个:

b = 3;

是一个 ExpressionStatementExpressionStatement 求值为求值表达式的结果:

  1. Let exprRef be the result of evaluating Expression.
  2. Return ? GetValue(exprRef).