자바스크립트 연속 할당 문제_javascript 기술

WBOY
풀어 주다: 2016-05-16 15:50:50
원래의
1209명이 탐색했습니다.

며칠 전 면접 질문을 검색하다가 이 코드를 발견했는데, 실행해 보니 생각했던 것과는 전혀 다른 느낌이었습니다

 var a = {
   n : 1
 };
 var b = a;
 a.x = a = {n : 2};
 console.log(a.x);
 console.log(b.x);

로그인 후 복사

출력 결과는 다음과 같습니다.

정의되지 않음

[객체 객체]

처음에는 명령문이 먼저 a에 {n : 2}를 할당한 다음 a.x에 {n : 2}를 할당해야 한다고 생각했습니다.

그런데 그게 아니어서 코드를 바꾸고 로그를 몇 개 추가했습니다

var test;
var a = {
  get test () {
    console.log("call a get");
    return test;
  },
  set test (value) {
    console.log("call a set");
    test = value;
  }
}
var test2;
var b = {
  get test2 () {
    console.log("call b get");
    return test2;
  },
  set test2 (value) {
    console.log("call b set");
    test2 = value;
  }
}
a.test = {
  n : 1
};
b.test2 = a.test;
console.log("begin");
a.test.x = a.test = {n : 2};

로그인 후 복사

이렇게 시작하면 이 과제가 수행하는 작업이 무엇인지 한눈에 알 수 있습니다.

명령문이 실행될 때 출력되는 로그입니다

먼저 get이 트리거된 다음 set이 트리거됩니다.

이 문장의 실행 순서는 왼쪽의 변수를 먼저 꺼낸 후 할당을 수행하는 것으로 추측됩니다. (이 문장을 실행하기 전에 먼저 개체 참조를 꺼낸 다음 오른쪽에서 할당을 수행하는 것입니다. 왼쪽으로)


위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿