javascript 전송 메커니즘

더 읽 기
js 에 값 만 전달 되 고 인용 전달 이 존재 하지 않 는 다 는 점 을 명확 하 게 해 야 한다.여기 서 두 가지 상황 으로 나 누 어 보면 먼저 기본 데이터 형식 이 고 Number 유형 을 예 로 들 면:
var a = 2;
var b = a;
a = a + 1;
alert("a = " + a);//   :a = 3
alert("b = " + b);//   :b = 2

 
여기 서 var b = a 는 a 의 값 을 b 에 게 복사 한 다음 에 둘 은 끄 고 싶 지 않 은 변수 입 니 다. 메모리 에 있 는 데이터 저장 구조 (기본 형식 데 이 터 는 메모리 에 스 택 메모리 가 존재 하고 고정된 메모리 크기 를 차지 합 니 다) 를 보십시오.
 창고:        
 
    a  :   3
    b  :   2
 
 
인용 유형 에 대해 js 도 값 전달 메커니즘 입 니 다. 다만 이때 전 달 된 값 은 대상 이 메모리 에 있 는 주소 이 고 주소 값 은 스 택 에 존재 합 니 다 (고정 스 택 메모리 차지). 대상 은 더미 에 존재 합 니 다 (고정 되 지 않 은 메모리 차지).
var person = new Object();
function f(person){
     person.name = "   ";
     person.age = "20";
     person = new Object();
     person.name = "   ";
     person.age = "10";
}
f(person);
alert("  :" + person.name  + ",  :" + person.age );
//   :  :   ,  :20 

 
여기 서 주의해 야 할 것 은 var 가 설명 한 person 은 전체 변수 이 고 매개 변수 인 person 은 부분 변수 입 니 다. 즉, 두 사람 은 같은 변수 가 아니 라 스 택 에 person 변수 만 있 기 시 작 했 습 니 다. 그 안에 대상 의 주소 값 이 저장 되 어 있 습 니 다. 함 수 를 호출 할 때 이 변수의 주소 값 은 부분 변수 person 에 존재 하 는 것 으로 복사 되 었 습 니 다.이것 은 스 택 에 두 개의 person 변수 가 있 는데 그 안에 같은 주소 값 이 저장 되 어 있 고 같은 대상 을 가리 키 며 이 어 국부 변수의 주소 값 을 대상 으로 이름 연령 속성 을 추가 합 니 다.프로그램 이 계속 아래로 내 려 갑 니 다. "person = new Object ();" 라 는 말 은 부분 변수 에 있 는 주소 값 을 다른 대상 을 가리 키 는 주소 값 으로 바 꾸 고 그 다음 에 다른 대상 에 게 이름과 연령 속성 을 추 가 했 습 니 다. 이때 전역 변수 에 있 는 주소 값 은 변 하지 않 았 습 니 다.우리 가 함 수 를 다 사용 한 후에 국부 변 수 는 이미 작용 을 잃 었 다. "alert (" 이름: "+ person. name  + ", 나이:" + person. age); "이 코드 의 person 은 사실 전역 변 수 를 가리 키 기 때문에 결 과 는 최초 대상 의 속성 을 인쇄 합 니 다!이해 하기 어렵다 면 이 코드 는 아래 코드 와 같은 뜻 입 니 다.
var person = new Object();
function f(p){
     p.name = "   ";
     p.age = "20";
     p = new Object();
     p.name = "   ";
     p.age = "10";
}
f(person);
alert("  :" + person.name  + ",  :" + person.age );

 우 리 는 함수 내 에서 사실상 국부 변수 만 조작 했다.
다음 코드 를 보십시오.
var person = new Object();
function f(p){
     p.name = "   ";
     p.age = "20";
     p = new Object();
     person.name = "   ";
     person.age = "10";
}
f(person);
alert("  :" + person.name  + ",  :" + person.age );
//   :  :   ,  :10

 이해 하기 쉽 지 않 을 까..

좋은 웹페이지 즐겨찾기