JS 매개 변수 전달 (값 전달 과 참조 전달)
책 P66 의 굵 은 상자 에 다음 과 같이 적 혀 있 습 니 다. ECMAScript 의 모든 매개 변 수 는 값 입 니 다. 참조 로 전달 할 수 없습니다.
그때 봤 는데 별로 곰 곰 이 생각해 본 적 이 없 었 어 요. 수박 겉 핥 기 죠? 오늘 은 좀 더 깊이 이 해 했 어 요.물론 어제 문 제 를 만 들 었 습 니 다.
접근 변 수 는 값 과 인용 두 가지 방식 이 있 으 며, 매개 변 수 는 값 에 따라 만 전달 할 수 있 습 니 다.
1. 기본 데이터 유형: Number, String 등 은 모두 값 에 따라 전달 하 는 것 이 이해 하기 쉽 습 니 다. 그때 저도 이 걸 이해 하 겠 습 니 다.
var a = 10
function add(num){
num+=10
}
add(a)
console.log(a)
위의 코드 와 같이 add (a) 를 실행 할 때 함수 의 arguments 라 는 가짜 배열 을 복사 합 니 다. 물론 num 이라는 이름 의 매개 변수 이기 도 합 니 다.arguments [0] = num, 함수 내부 에서 num 을 추가 조작 하 였 습 니 다. num = 20 입 니 다.그러나 외부 에서 마지막 으로 a 를 출력 할 때 는 여전히 10 으로 a 와 함수 내부 의 num 이 서로 간섭 하지 않 는 다 는 것 을 의미한다.사실 이 때 이름 을 가 진 매개 변 수 를 부분 적 인 매개 변수 로 볼 수 있 고 함수 운행 이 끝나 면 이에 따라 소각 할 수 있 습 니 다.이것 은 값 에 따라 전 달 된 것 으로 메모리 의 값 을 num 에 복사 했다.그래서 내부 에서 num 에 대한 조작 은 전역 변수 a 의 값 에 영향 을 주지 않 습 니 다.
2. 기본 유형의 값 은 이해 하기 쉽 지만 JS 에서 대상 유형 은 이해 하기 어렵 습 니 다. 어쨌든 저 는 약간 복잡 하 다 고 생각 합 니 다.
먼저 예 를 들 어:
var student = new Object()
function addNum (obj) {
obj.num = '23'
}
addNum(student)
console.log(student.num)
위 와 같이 먼저 student 대상 을 정의 한 다음 에 함 수 를 통 해 이 대상 에 num 학 번 의 속성 값 을 추가 합 니 다: 23.그 후에 출력 을 인쇄 할 때 이상 하 게 도 student 대상 에 속성 을 추가 하고 외부 대상 에 영향 을 주 었 습 니 다. 이 전송 값 은 분명히 인용 전달 입 니 다. 함수 내부 obj 와 student 는 모두 더미 속 의 같은 대상 을 가리 키 고 있 습 니 다.인용 전달 이 잖 아.그러나 홍 보 서 에 적 힌 모순: 인용 을 통 해 전달 할 수 없 는 매개 변 수 는?이상 하 네.
대신 이 쓴 설명 을 많이 찾 아 봤 지만 설명 이 안 될 것 같 아 이해 하기 어렵다.저 는 이렇게 이해 하 는 것 이 아니 라 고 생각 합 니 다. 상기 함 수 를 예 로 들 어 저 는 student 대상 인 스 턴 스 를 매개 변수 로 obj 에 전달 할 때 student 가 가리 키 는 대상 의 주 소 를 obj 에 복사 한 것 입 니 다. 그러면 obj 공간 에 저 장 된 주소 와 student 은 모두 공 통 된 저장 공간 을 가리 킵 니 다.인용 전달 이 라면 obj 는 공간 이 없습니다. student 와 공간 을 공유 합 니 다. 이 공간 은 student 인 스 턴 스 대상 을 가리 키 는 주 소 를 저장 합 니 다.
저자: 어 명 - 단심 출처: CSDN 원문:https://blog.csdn.net/weixin_39728230/article/details/80607294
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.