js 함수 에서 전달 대상 파라미터
8771 단어 js
javascript 전달 매개 변수 가 object 라면 값 에 따라 전달 합 니까? 인용 에 따라 전달 합 니까?
저작권 은 작가 에 게 있다.상업 전 재 는 작가 에 게 연락 하여 권한 을 수 여 받 으 십시오. 비 상업 전 재 는 출처 를 밝 혀 주 십시오.저자: 소 묵 귤 링크:http://www.zhihu.com/question/27114726/answer/35481766 알다
이전에 이 부분 을 처음 보 았 을 때 도 약간 어리둥절 했다. 오늘 은 문제 주가 이 문 제 를 묻 는 것 을 보고 다시 한 번 자세히 보고 관련 자 료 를 찾 아 보 았 는데 지금 은 비교적 명확 한 셈 이다.자신의 이해 와 결합 하여 정리 하 였 다.P. S. 위의 읽 기 체험 이 좋 지 않다 고 생각 되면 제 블 로 그 를 직접 방문 하 는 것 을 권장 합 니 다. 글씨체, 크기, 줄 간격 은 모두 정 성 스 럽 게 선택 한 것 입 니 다. 여기에 찍 습 니 다. - > Js 중간 값 의 방문 과 매개 변수 전달 문 제 는 이 문 제 를 철저히 말 해 야 하기 때문에 더욱 깊 은 지식 과 관련 되 기 때문에 지면 이 길 기 때문에 인내심 을 가지 고 보 세 요.사실 당신 은 조금 만 알 면 됩 니 다. 대상 의 변 수 를 저장 합 니 다. 그 안에 설 치 된 값 은 이 대상 이 메모리 에 있 는 주소 입 니 다.다음은 상세 분해: 데이터 형식
javascript 에서 데이터 형식 은 두 가지 로 나 눌 수 있 습 니 다.
변 수 를 설명 할 때 다른 메모리 할당
서로 다른 메모리 분배 메커니즘 도 서로 다른 접근 메커니즘 을 가 져 왔 다. javascript 에 서 는 메모리 에 저 장 된 대상 에 직접 접근 할 수 없 기 때문에 대상 을 방문 할 때 먼저 이 대상 이 메모리 에 있 는 주 소 를 얻 은 다음 에 이 주소 에 따라 이 대상 의 값 을 얻는다. 이것 이 바로 전설의 인용 접근 이다.원본 형식의 값 은 직접 접근 할 수 있 습 니 다.변 수 를 복사 할 때의 차이 점
매개 변수 전달 의 차이
우선 우 리 는 ECMAScript 의 모든 함수 의 매개 변 수 는 값 에 따라 전달 된다 는 것 을 명확 하 게 해 야 한다.그러나 왜 원본 형식 과 인용 형식의 값 을 언급 할 때 여전히 차이 가 있 습 니까? 메모리 가 분 배 될 때의 차이 때 문 이 아 닙 니 다.(제 가 비교 해 봤 는데 여 기 는 변 수 를 복사 할 때 지 키 는 체제 와 똑 같 잖 아 요. 매개 변 수 를 전달 할 때 실제 인삼 을 형 삼 에 복사 하 는 과정 으로 간단하게 이해 할 수 있 습 니 다)
인용 값: 대상 변수 에 있 는 값 은 이 대상 이 메모리 에 있 는 메모리 주소 입 니 다. 이 점 을 항상 명심 하 세 요!따라서 전달 하 는 값 은 바로 이 메모리 주소 입 니 다. 이것 은 바로 함수 내부 에서 이 매개 변수 에 대한 수정 이 외부 에 나타 나 는 이유 입 니 다. 왜냐하면 그들 은 모두 같은 대상 을 가리 키 기 때 문 입 니 다.아마 내 가 이렇게 말 한 후에 너 는 책의 예 에 대해 좀 이해 하지 못 할 것 이다. 그러면 그림 을 보 세 요: & lt;img src="https://pic1.zhimg.com/33472bcc2789b7d071f119169b7d6e20_b.jpg" data-rawwidth="719" data-rawheight="419" class="origin_image zh-lightbox-thumb" width="719" data-original="https://pic1.zhimg.com/33472bcc2789b7d071f119169b7d6e20_r.jpg">
따라서 인용 에 따라 전달 된다 면 두 번 째 칸 의 내용 (즉 변수 자체) 을 모두 전달 하 는 것 이다 (네 번 째 칸 의 존재 가 없 을 것 이다).그러나 사실은 변수 가 그 안의 값 을 매개 변수 에 전달 하고 이 매개 변수 도 원래 대상 을 가리 키 게 하 는 것 이다.따라서 함수 내부 에서 이 매개 변수 에 다른 대상 을 할당 할 때 이 매개 변 수 는 새로운 대상 의 메모리 주 소 를 새로운 대상 으로 변경 합 니 다. 그러나 이때 원래 의 변 수 는 원래 의 대상 을 가리 키 고 이 때 그들 은 서로 독립 됩 니 다.그러나 이 매개 변수 가 대상 내부 의 속성 을 바 꾸 는 것 이 라면 이 변 화 는 외부 에 나타 날 것 입 니 다. 그들 이 공동으로 가리 키 는 이 대상 이 수정 되 었 기 때 문 입 니 다!다음 예 를 살 펴 보 자. (전설의 callby sharing)
var obj1 = {
value:'111'
};
var obj2 = {
value:'222'
};
function changeStuff(obj){
obj.value = '333';
obj = obj2;
return obj.value;
}
var foo = changeStuff(obj1);
console.log(foo);// '222' obj obj2
console.log(obj1.value);//'333'
code 의 주석 이 너무 작 아서 잘 보이 지 않 습 니 다. 제 가 여기 로 옮 기 겠 습 니 다.
/* obj1 , value ,
* changeStuff , obj obj1 .
* , , obj1.value '222'
*/
자, 이상 이 이 문제 에 관 한 모든 해석 입 니 다.
여러분 관심 있 으 시 면 콜 by value, 콜 by reference callby sharing 등 함수 전달 메커니즘 콜 by sharing 에 대해 알 아 보 세 요.
그리고 stackoverflow 에서 함수 전달 에 대한 이 문 제 는 상당히 치밀 하 게 해석 되 어 볼 만하 다.(아래 링크 가 있 음)
참고:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.