javascript 면접 문제, 연속 할당 에 대한 구덩이

1119 단어 전단 면접
var a = {n: 1};
var b = a;
a.x = a = {n: 2};

console.log(a.x)     
console.log(b.x)

a.x     // --> undefined
b.x     // --> {n: 2}

1. 우선 순위 . 의 우선 순위 가 = 보다 높 기 때문에 먼저 실행 a.x 하면 메모리 에 있 는 {n: 1}{n: 1, x: undefined} 이 되 고 변화 한 후에 해당 하 는 b.x 도 변화 한다. 같은 대상 을 가리 키 기 때문이다.
2. 할당 작업 은 오른쪽 에서 왼쪽으로 하기 때문에 먼저 실행 a = {n: 2}, a 의 인용 이 바 뀌 었 습 니 다. 그리고 이 반환 값 은 a.x 에 게 할당 되 었 습 니 다. 주의해 야 할 것 은 이때 a.x 가 첫 번 째 단계 {n: 1, x: undefined} 의 대상 이 고 사실은 b. x 입 니 다. b.x = {n: 2} 에 해당 합 니 다.
요약: 관건 점 1: a. x 는 x 의 성명 을 완 성 했 고 그 값 은 undefined 입 니 다.관건 2: 대상 구성원 이 할당 을 기다 리 고 있 을 때 잠 겨 있 는 할당 목 표 는 대상 이 아니 라 구성원 입 니 다.관건 3: 대상 이 값 을 다시 할당 할 때 원래 메모리 의 값 을 수정 하 는 것 이 아니 라 메모리 의 값 을 재배 치 하 는 것 입 니 다. 스 택 메모리 의 지침 은 해당 하 는 수정 을 할 것 입 니 다.(원본 메모리 에 여러 개의 스 택 메모리 가 가리 키 고 있 으 면 참조 가 존재 하기 때문에 원본 메모리 의 데 이 터 는 사라 지지 않 습 니 다. 더 이상 참조 가 없 으 면 JS 의 쓰레기 회수 시스템 에 의 해 수 거 됩 니 다. 대상 의 구성원 대상 도 마찬가지 입 니 다. PS: 참조 형식 은 모두 이와 같 아야 합 니 다)

좋은 웹페이지 즐겨찾기