2016-06-11 2 views
4

할당 연산자 오른쪽에서 왼쪽 연관성이 있습니다. 그래서할당 연관성

var x,y; 
x=y=1; 

작품이 예상 x는 1. 이제 코드를 고려 동등하게 다음에, 그러나

var foo = {n: 2}; 
foo.x=foo; 

:

var foo={}; 
foo.x = foo = {n: 2}; 

가 나는 다음과 같은 일을 위의 기대를 첫 번째 경우 foo.x는 undefined이고 두 번째 경우는 foo.x points to foo (순환 참조)입니다. 설명이 뭐야?

답변

5

JavaScript는 왼쪽에서 오른쪽으로 표현식을 평가합니다. 우리는 추가 변수를 사용하여 무슨 일이 일어나고 있는지 보여줄 수 있기 때문에 연관성의

var foo = {}; 
var bar = foo; // keep a reference to the object originally stored in foo 
foo.x = foo = {n: 2}; 

을, 마지막 문장은 다음과 같이 해석한다 :

foo.x = (foo = {n: 2}); 

그러나 때문에 평가 순서의, foo.x 실행은 첫 번째 (위치로 결정 값을 저장), foo 다음에 {n: 2}.

foo = {"n" : 2} 
bar = {"x" : {"n" : 2 }} 
+0

언급을 주장에게 그 임무를 백업 : 그래서 우리는 변수 foo{n: 2}를 저장, 우리가 bar을 보면 알 수 foo의 이전 내용 ...의 재산 x에 같은 값을 할당 표현식은 왼쪽에서 오른쪽으로 계산됩니까? – haim770

+0

@ haim770 http://www.ecma-international.org/ecma-262/6.0/에서 "* ECMAScript는 표현의 왼쪽에서 오른쪽으로의 평가를 지정합니다"*를 발견했습니다. – melpomene