Ответ 1
См. раздел 11.1.5 ECMAScript, определяющий способ обработки ObjectLiteral
.
В частности:
PropertyNameAndValueList
,PropertyName
:AssignmentExpression
оценивается следующим образом:
Оценить свойствоNameAndValueList.
Вычислить имя свойства.
Вычислить присвоение.
...
Где (1) - рекурсивное определение.
Это означает, что самый левый элемент в литерале объекта сначала оценивается, поэтому {foo: 2, bar: 1}
действительно специфицирован.