Javascript 할당 메커니즘에 대한 자세한 설명_기본 지식

WBOY
풀어 주다: 2016-05-16 16:30:45
원래의
1352명이 탐색했습니다.

오늘은 과제 문제와 관련된 Javascript에 대한 질문에 답변을 드렸는데, 이 질문을 잘 요약해 드리고 싶었습니다.

코드 복사 코드는 다음과 같습니다.

var a = '테스트';
var b = function() {};
b.a = '테스트';
함수변경(m, n) {
m = '변경';
n.a = '변경';
}
변경(a, b);

위 코드를 실행하면 변수 a와 b의 값이 바뀌나요?

원래 및 참조 값

이전 글에서는 원래 값과 참조 값에 대해 소개했습니다. 원래 값은 정의되지 않음, Null, Boolean, Number, String 등을 의미하며 스택에 저장되는 반면 참조 값은 통합됩니다. Object에서 추출되어 힙에 저장됩니다.
여기서는 두 가지를 명확하게 구분해야 합니다.

코드 복사 코드는 다음과 같습니다.

var a = '테스트';
var b = new String('test');
var A = '참';
var B = new Boolean('true');

위 4가지 변수에 대해 a와 A는 원래 값이고, b와 B는 기준 값입니다.

할당 메커니즘

원래 값과 참조 값의 차이를 알고 나면 Javascript의 할당 메커니즘을 자세히 소개할 수 있습니다.

Javascript에서는 기본 값 유형의 변수에 대해 각 할당이 복사본을 생성하는 반면, 참조 값의 경우 이름에서 알 수 있듯이 동일한 저장 개체의 메모리에 대한 참조 지점을 통해 할당합니다.
원래 값 할당:

코드 복사 코드는 다음과 같습니다.

var a = 1;//원래 값
var b = a;//변수 b에 복사본 생성
b = 2;//a와는 관련이 없습니다
경고(a);//1번 출력

기준값 할당:

코드 복사 코드는 다음과 같습니다.

var A= new Object();//참조값
A.x = 1;
var B = A; //동일한 메모리를 가리키는 참조 할당
B.x = 2;//B를 수정하면 A에 영향을 미칩니다
경고(A.x);//출력 2

매개변수 전달

이제 두 가지 유형의 값을 함수 매개변수에 전달하는 방법을 살펴보겠습니다.
1. 원래 값 전달

코드 복사 코드는 다음과 같습니다.

var a = 1;
기능 테스트(m) {
m = 2;
}
테스트(a);
경고(a);//1번 출력

출력이 1이므로 함수가 변수의 값만 전달한다는 것을 알 수 있으므로 함수 본문의 m은 전달된 값 1을 얻은 다음 값 2를 할당받습니다. 이 프로세스는 영향을 미치지 않습니다. 외부변수 라.

2. 기준값 통과

코드 복사 코드는 다음과 같습니다.

var A= new Object();
A.x = 1
기능 테스트(M) {
M.x = 2;
}
테스트(A);
경고(A.x);//출력 2

출력은 2이므로 함수가 변수의 주소를 전달하므로 함수 본문의 M이 전달된 주소를 가져오므로 x 속성에 값 2가 할당되고 변수를 가리키는 A에도 영향을 미칩니다. 같은 메모리 주소.

요약

이제 시작 질문으로 돌아가겠습니다.

코드 복사 코드는 다음과 같습니다.

var a = '테스트';
var b = function() {};
b.a = '테스트';
함수변경(m, n) {
m = '변경';
n.a = '변경';
}
변경(a, b);

변수 a는 원래 값이고 변수 b는 참조 값입니다. 하나는 값이고 다른 하나는 함수 본문에 전달된 주소입니다. 따라서 함수가 실행된 후에는 변수 a가 변경되지 않습니다. 변수 b의 값이 변경됩니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!