Допустим, мы начнем с этого:Два задания в одной строке
var foo = {n:1}; var bar = foo;
В JavaScript, что порядок, в котором следующие задания выполняются:
foo.x = foo = {n:2};
Когда Я искал ответы на это, я нашел несколько, которые, казалось, предполагали, что назначение происходит от ПРАВА НА ЛЕВУЮ, например:
foo = {n:2}; foo.x = foo;
В этом случае можно было бы ожидать:
console.log(foo) //{n:2, x:Object} - (a circular reference back to foo)
Однако то, что я вижу в консоли, когда я на самом деле это говорит о том, что задания на самом деле произошло слева направо:
console.log(foo) //{n:2} console.log(bar) //{n:1, x:Object}
- -> Объект {n: 1} получает свойство «x», а foo переназначается на новый объект {n: 2}
Может ли кто-нибудь уточнить для меня орду r операций, когда в одной строке есть несколько назначений?
Кроме того, что основное правило, которое отличает выше сценарий от такой ситуации, как следующее: Multiple variable assignments in one row
Некоторые из ответов в приведенном выше п вопроса, что задания примитивов выполняются справа налево .. .
Как вы это знаете? – fuzz
Нет абсолютно никакой вещи, как объекты «заполнителя». –
Перечитав свой ответ и [spec] (http://es5.github.io/#x11.13.1), я заметил, почему вы сделали это вместе с фатальный недостаток в моем собственном ответе. Нет «объекта-заполнителя», но вместо этого * ссылка * на свойство 'x' объекта in-memory. –