오늘은 과제 문제와 관련된 Javascript에 대한 질문에 답변을 드렸는데, 이 질문을 잘 요약해 드리고 싶었습니다.
위 코드를 실행하면 변수 a와 b의 값이 바뀌나요?
원래 및 참조 값
이전 글에서는 원래 값과 참조 값에 대해 소개했습니다. 원래 값은 정의되지 않음, Null, Boolean, Number, String 등을 의미하며 스택에 저장되는 반면 참조 값은 통합됩니다. Object에서 추출되어 힙에 저장됩니다.
여기서는 두 가지를 명확하게 구분해야 합니다.
위 4가지 변수에 대해 a와 A는 원래 값이고, b와 B는 기준 값입니다.
할당 메커니즘
원래 값과 참조 값의 차이를 알고 나면 Javascript의 할당 메커니즘을 자세히 소개할 수 있습니다.
Javascript에서는 기본 값 유형의 변수에 대해 각 할당이 복사본을 생성하는 반면, 참조 값의 경우 이름에서 알 수 있듯이 동일한 저장 개체의 메모리에 대한 참조 지점을 통해 할당합니다.
원래 값 할당:
기준값 할당:
매개변수 전달
이제 두 가지 유형의 값을 함수 매개변수에 전달하는 방법을 살펴보겠습니다.
1. 원래 값 전달
출력이 1이므로 함수가 변수의 값만 전달한다는 것을 알 수 있으므로 함수 본문의 m은 전달된 값 1을 얻은 다음 값 2를 할당받습니다. 이 프로세스는 영향을 미치지 않습니다. 외부변수 라.
2. 기준값 통과
출력은 2이므로 함수가 변수의 주소를 전달하므로 함수 본문의 M이 전달된 주소를 가져오므로 x 속성에 값 2가 할당되고 변수를 가리키는 A에도 영향을 미칩니다. 같은 메모리 주소.
요약
이제 시작 질문으로 돌아가겠습니다.
변수 a는 원래 값이고 변수 b는 참조 값입니다. 하나는 값이고 다른 하나는 함수 본문에 전달된 주소입니다. 따라서 함수가 실행된 후에는 변수 a가 변경되지 않습니다. 변수 b의 값이 변경됩니다.