javascript - Assignment associativity -
this question has answer here:
the assignment operator has right-to-left associativity.
var x,y; x=y=1;
works expected , x equals 1. consider code:
var foo={}; foo.x = foo = {n: 2};
i expect above work following:
var foo = {n: 2}; foo.x=foo;
however, in first case foo.x undefined
while in second case foo.x points foo
(circular reference). explanation?
javascript evaluates expressions left right. can show what's going on using additional variable:
var foo = {}; var bar = foo; // keep reference object stored in foo foo.x = foo = {n: 2};
because of associativity, last statement parsed as:
foo.x = (foo = {n: 2});
but because of evaluation order, foo.x
runs first (determining store value), foo
, {n: 2}
. store {n: 2}
in variable foo
, assign same value property x
of old contents of foo
... can see looking @ bar
:
foo = {"n" : 2} bar = {"x" : {"n" : 2 }}
Comments
Post a Comment