javascript - JS 할당 문제
过去多啦不再A梦
过去多啦不再A梦 2017-05-18 10:51:04
0
9
709

우리 모두는 JavaScript의 할당이 오른쪽에서 왼쪽으로 이루어진다는 것을 알고 있습니다

으아악

위 문장은 실제로 이렇게 실행됩니다

으아악

하지만 누군가가 관련되어 있다면 어떨까요? 어제 본 예

으아악

처음 두 줄은 매우 간단합니다. bar를 foo로 가리킵니다.
세 번째 줄에서는 foo = { b: 3 }가 처음에 실행되어 foo를 다른 객체로 리디렉션합니다.

다음 문장 foo.x = foo, 원래는 foo인 줄 알았어요. 으아악

실제 테스트에서는 foo 문장에서 foo.x가 발견되었습니다. 그런데 실제 실행은 오른쪽에서 왼쪽으로 진행되나요?

过去多啦不再A梦
过去多啦不再A梦

모든 응답(9)
PHPzhong

방금 훌륭한 스승님의 좋은 설명을 봤습니다(정보를 확인 중입니다). 객체 연속 할당에 대한 대략적인 설명은 다음과 같습니다. 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}을 가리킵니다.

Ty80

최근에 이 문제에 대해 논의한 결과 다음과 같은 결론에 도달했습니다. foo.x 中的 foo 实际是对 { a: 2 }는 참고 사항이지만 실행 순서는 여전히 오른쪽에서 왼쪽이므로 이에 대해서는 의심의 여지가 없습니다.

으아악
漂亮男人

Assignment는 표현식입니다.
Associativity는 오른쪽에서 왼쪽으로, 즉 a = b = ca = (b = c)입니다. a = b = ca = (b = c)
返回值是,等号右边那个表达式的返回值,即 b = c 的返回值是c반환값은 등호 오른쪽 표현식의 반환값, 즉 b=c의 반환값은 c의 값입니다. 코드>.

仅有的幸福

로컬 왼쪽에서 오른쪽(.), 매크로 오른쪽에서 왼쪽(=). 이 foo 는 그 foo 가 아닙니다.

으아악

두 번째 foo를 읽을 때 이미 첫 번째 foo에서 { a: 2 } 참조를 얻었으며 x 속성에 값을 할당하기를 기다리고 있습니다.

滿天的星座

할당은 오른쪽에서 왼쪽으로 이루어지지만 실행 전에 코드를 처리해야 합니다. foo.x = foo = { b: 3 },对属性的处理是按值进行的,即此时已经定位到了{ a: 2 }이 개체의 실제 저장 위치는 개체가 가리키는지 여부에 관계없이 x 속성에 대한 할당이기도 합니다. to foo 또는 bar가 가리키는 객체입니다. 객체에 할당하면 객체에 저장된 실제 객체의 주소가 변경됩니다. 즉, foo의 포인터가 변경됩니다.

小葫芦

이런 글은 말이 안되는 것 같아요.
실제 프로덕션에서 이런 코드를 많이 접하게 된다면 한 눈에 이해할 수 있을까요?
지금처럼 이전 질문에 답한 사람들 중에 일반인의 용어로 설명할 수 있는 사람이 몇 명이나 될까요?

迷茫

/a/11...

刘奇

으아아아 으아아아

그러나 실제로 위의 세 문장을 순서대로 실행하면 결과가 달라집니다. 왜냐하면 foo.x는 파싱 단계에서 준비되었기 때문에 실제로는 bar.x를 가리키기 때문입니다

실제 동일 코드

으아아아
洪涛

포인터를 사용하여 이 문제를 이해할 수 있습니다

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿