찾다

 >  Q&A  >  본문

javascript - JS 할당 문제

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

으아악

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

으아악

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

으아악

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

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

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

过去多啦不再A梦过去多啦不再A梦2746일 전693

모든 응답(9)나는 대답할 것이다

  • PHPz

    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}을 가리킵니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-18 10:53:04

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

    으아악

    회신하다
    0
  • 漂亮男人

    漂亮男人2017-05-18 10:53:04

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

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-05-18 10:53:04

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

    으아악

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

    회신하다
    0
  • 滿天的星座

    滿天的星座2017-05-18 10:53:04

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

    회신하다
    0
  • 高洛峰

    高洛峰2017-05-18 10:53:04

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

    회신하다
    0
  • 迷茫

    迷茫2017-05-18 10:53:04

    /a/11...

    회신하다
    0
  • 怪我咯

    怪我咯2017-05-18 10:53:04

    으아아아 으아아아

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

    실제 동일 코드

    으아아아

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-18 10:53:04

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

    회신하다
    0
  • 취소회신하다