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

Popular posts from this blog

wordpress - (T_ENDFOREACH) php error -

Export Excel workseet into txt file using vba - (text and numbers with formulas) -

Using django-mptt to get only the categories that have items -