오늘 저는 할당 문제와 관련된 JavaScript에 대한 질문에 답 했으므로이 문제를 신중하게 요약하고 싶습니다.
코드 사본은 다음과 같습니다.
var a = '테스트';
var b = function () {};
BA = '테스트';
함수 변경 (m, n) {
M = '변경';
na = '변경';
}
변화 (a, b);
위 코드를 실행 한 후 변수 A와 B의 값이 변경됩니까?
원본 및 참조 값
이전 기사에서 원래 값과 참조 값을 소개했습니다. 원래 값은 스택에 저장된 정의되지 않은, 널, 부울, 숫자, 문자열 등을 나타냅니다. 참조 값은 힙에 저장된 객체에서 통합됩니다.
여기서 우리는 두 가지를 구별해야합니다.
코드 사본은 다음과 같습니다.
var a = '테스트';
var b = 새 문자열 ( 'test');
var a = 'true';
var b = 새로운 부울 ( 'true');
위의 네 가지 변수의 경우 A와 A는 원래 값이고 B와 B는 기준 값입니다.
할당 메커니즘
원래 값과 참조 값의 차이를 명확히 한 후 JavaScript 할당 메커니즘을 자세히 소개 할 수 있습니다.
JavaScript에서 각 할당은 원래 값 유형의 변수에 대한 사본을 생성하고, 참조 된 값의 이름은 동일한 저장소 개체의 메모리를 참조하여 할당됩니다.
원래 가치 할당 :
코드 사본은 다음과 같습니다.
var a = 1; // 원래 값
var b = a; // 변수 b에 사본을 생성
b = 2; // a와 관련이 없습니다
경고 (a); // 출력 1
참조 된 값의 할당 :
코드 사본은 다음과 같습니다.
var a = new Object (); // 참조 값
Ax = 1;
var b = a; // 참조 할당, 동일한 메모리를 가리키는 과제
bx = 2; // b의 수정은 a에 영향을 미칩니다
경고 (AX); // 출력 2
매개 변수 패스
이제 두 가지 유형의 값을 전달하여 매개 변수를 동시에 기능하는 방법을 살펴 보겠습니다.
1. 원래 값을 전달하십시오
코드 사본은 다음과 같습니다.
var a = 1;
기능 테스트 (m) {
m = 2;
}
종피);
경고 (a); // 출력 1
출력은 1이므로 함수가 변수의 값을 전달한다는 것을 알고 있으므로 함수의 M은 값 1을 가져오고 2에 할당됩니다.이 프로세스는 외부 변수 a에 영향을 미치지 않습니다.
2. 참조 값을 전달하십시오
코드 사본은 다음과 같습니다.
var a = new Object ();
Ax = 1
기능 테스트 (m) {
MX = 2;
}
종피);
경고 (AX); // 출력 2
출력은 2이므로 함수가 변수의 주소를 전달한다는 것을 알고 있으므로 기능 본문의 m은 전달 된 주소를 가져옵니다. 따라서 속성 x가 2에 할당되면 동일한 메모리 주소를 가리키는데도 영향을 미칩니다.
요약
이제 오프닝 질문으로 돌아가 봅시다.
코드 사본은 다음과 같습니다.
var a = '테스트';
var b = function () {};
BA = '테스트';
함수 변경 (m, n) {
M = '변경';
na = '변경';
}
변화 (a, b);
변수 a는 원래 값이고, 변수 b는 참조 값이고, 하나는 값으로 함수 본문에 전달되고 다른 하나는 주소이며, 함수는 실행되면 변수 A가 변경되지 않으며 변수 b의 값이 변경됩니다.