그래서 저는 자바 스크립트에서 대량 할당이 정확히 어떻게 작동하는지 확인하기 위해 며칠 동안 놀았습니다.
먼저 콘솔에서이 예제를 시도했습니다.
a = b = {};
a.foo = 'bar';
console.log(b.foo);
결과는 경고에 "막대"가 표시되었습니다. 즉 공정의 충분하다, a그리고 b정말 같은 객체 단지 별칭이다. 그런 다음 어떻게이 예제를 더 간단하게 만들 수 있을지 생각했습니다.
a = b = 'foo';
a = 'bar';
console.log(b);
그것은 거의 똑같지 않습니까? 이번에 는 첫 번째 예제의 동작에서 예상했던대로 반환 foo되지 않습니다 bar.
왜 이런 일이 발생합니까?
NB 이 예제는 다음 코드를 사용하여 훨씬 더 단순화 할 수 있습니다.
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(자바 스크립트가 문자열과 정수와 같은 프리미티브를 해시와 다르게 취급한다고 생각합니다. 해시는 포인터를 반환하고 "코어"프리미티브는 자신의 복사본을 반환합니다)