JavaScript evaluates expressions from left to right. We can show what happens using an additional variable:
var foo = {};
var bar = foo;
foo.x = foo = {n: 2};
Due to associativity, the last statement is parsed as:
foo.x = (foo = {n: 2});
- foo.x (, ), foo, {n: 2}. {n: 2} foo, x foo... , bar:
foo = {"n" : 2}
bar = {"x" : {"n" : 2 }}