변수 A가 변수 B에 할당되면 스택의 값이 새 변수에 할당된 공간에 복사됩니다.
어떻게 이해하나요?
var x = y = 1; >y = 2;
alert(x);
x의 값은 무엇입니까?
var obj = {}; var sub = {};
sub['id'] = 3;
obj['sub'] = sub
sub['id'] = 4; sub'] ['id']);
obj['sub']['id']의 값은 무엇입니까? 그들이 정말로 당신의 기대에 부응합니까?
두 코드를 각각 실행한 결과 프로그램의 첫 번째 부분에서 x 값은 변경되지 않았지만 두 번째 부분에서는 obj['sub']['id'] 값이 변경되었음을 확인했습니다. 프로그램이 변경되었습니다. 이는 할당 작업이기도 하며 다른 복사본의 값도 수정하는 것입니다. 프로그램 섹션의 소스 변수는 변경되지 않은 채 유지되지만 프로그램 섹션의 소스 변수는 변경되는 이유는 무엇입니까? 이 이전은 가치에 의한 것인가, 아니면 참조에 의한 것인가?
Li Songfeng이 번역한 "JavaScript 고급 프로그래밍 제2판"에 답이 나와 있습니다.
처음 두 예에서 A의 값은 실제로 B에 복사됩니다. 차이점은 첫 번째 예에서 A의 값은 int 유형의 1인 반면, 두 번째 예에서는 A의 값은 복사 후 첫 번째 예에서 B의 값은 새로운 int가 되고 그 값은 1인 반면, 두 번째 예에서는 B의 값이 새 주소 포인터가 되며 그 값은 이 개체의 주소입니다.
다음 예시는 이해에 도움이 됩니다
obj.name = "test1";
obj = {}
obj.name = "test2"; = new Object() ;
setName(person);
alert(person.name);
보시다시피 setName 함수는 name 속성을 수정하기 위해 호출됩니다. person.name 변수 값은 변경되지 않았습니다. 이는 함수에서 obj가 가리키는 주소가 변경되므로 이 주소의 이름 속성을 수정해도 원래 주소의 이름 속성에는 영향을 미치지 않기 때문입니다. 또 다른 측면에서는 JavaScript가 값으로 전달된다는 것도 확인합니다.