우리 모두는 JavaScript의 할당이 오른쪽에서 왼쪽으로 이루어진다는 것을 알고 있습니다
으아악위 문장은 실제로 이렇게 실행됩니다
으아악하지만 누군가가 관련되어 있다면 어떨까요? 어제 본 예
으아악처음 두 줄은 매우 간단합니다. bar를 foo로 가리킵니다.
세 번째 줄에서는 foo = { b: 3 }가 처음에 실행되어 foo를 다른 객체로 리디렉션합니다.
다음 문장 foo.x = foo, 원래는 foo인 줄 알았어요. 으아악
실제 테스트에서는 foo 문장에서 foo.x가 발견되었습니다. 그런데 실제 실행은 오른쪽에서 왼쪽으로 진행되나요?PHPz2017-05-18 10:53:04
방금 훌륭한 스승님의 좋은 설명을 봤습니다(정보를 확인 중입니다). 객체 연속 할당에 대한 대략적인 설명은 다음과 같습니다. foo.x = foo = { b: 3 }, 먼저 인터프리터 실행 중. foo.x와 foo가 생성되었는지 확인하세요. 그렇지 않다면 생성하고 둘 다 가장 오른쪽 개체를 가리킵니다. 당연히 foo가 생성되고 { a: 2 }를 가리키므로 foo.x가 아직 생성되지 않았으므로 생성하세요. 이때 bar와 foo는 모두 {a:2,x:null}을 가리키고, 둘 다 오른쪽의 {b:3} 객체를 가리킵니다. {a:2,x:{b:3}},foo는 {b:3}을 가리킵니다.
PHP中文网2017-05-18 10:53:04
최근에 이 문제에 대해 논의한 결과 다음과 같은 결론에 도달했습니다. foo.x
中的 foo
实际是对 { a: 2 }
는 참고 사항이지만 실행 순서는 여전히 오른쪽에서 왼쪽이므로 이에 대해서는 의심의 여지가 없습니다.
漂亮男人2017-05-18 10:53:04
Assignment는 표현식입니다.
Associativity는 오른쪽에서 왼쪽으로, 즉 a = b = c
는 a = (b = c)
입니다. a = b = c
是a = (b = c)
返回值是,等号右边那个表达式的返回值,即 b = c
的返回值是c
반환값은 등호 오른쪽 표현식의 반환값, 즉 b=c
의 반환값은 c
.
仅有的幸福2017-05-18 10:53:04
로컬 왼쪽에서 오른쪽(.), 매크로 오른쪽에서 왼쪽(=). 이 foo 는 그 foo 가 아닙니다.
으아악두 번째 foo를 읽을 때 이미 첫 번째 foo에서 { a: 2 }
참조를 얻었으며 x 속성에 값을 할당하기를 기다리고 있습니다.
滿天的星座2017-05-18 10:53:04
할당은 오른쪽에서 왼쪽으로 이루어지지만 실행 전에 코드를 처리해야 합니다. foo.x = foo = { b: 3 }
,对属性的处理是按值进行的,即此时已经定位到了{ a: 2 }
이 개체의 실제 저장 위치는 개체가 가리키는지 여부에 관계없이 x 속성에 대한 할당이기도 합니다. to foo 또는 bar가 가리키는 객체입니다. 객체에 할당하면 객체에 저장된 실제 객체의 주소가 변경됩니다. 즉, foo의 포인터가 변경됩니다.
高洛峰2017-05-18 10:53:04
이런 글은 말이 안되는 것 같아요.
실제 프로덕션에서 이런 코드를 많이 접하게 된다면 한 눈에 이해할 수 있을까요?
지금처럼 이전 질문에 답한 사람들 중에 일반인의 용어로 설명할 수 있는 사람이 몇 명이나 될까요?
怪我咯2017-05-18 10:53:04
으아아아 으아아아
그러나 실제로 위의 세 문장을 순서대로 실행하면 결과가 달라집니다. 왜냐하면 foo.x는 파싱 단계에서 준비되었기 때문에 실제로는 bar.x를 가리키기 때문입니다
실제 동일 코드
으아아아