먼저 수확물을 잠시 말리세요:
1.javascript 변수에는 두 가지 유형의 값이 포함됩니다. 하나는 참조 유형 값이고 다른 하나는 기본 유형 값입니다. 참조 유형에는 배열, 객체, 함수(기본이 아닌 유형은 참조 유형이라고 이해될 수 있음)가 포함됩니다. 5가지 기본 유형에는 정의되지 않음, null, 문자열, 부울, 숫자
2. 함수 매개변수를 전달하는 메커니즘은 변수 값을 복사하는 것입니다.
책에는 "함수 외부의 값을 함수 내부의 매개변수에 복사하는 것은 한 변수의 값을 다른 변수에 복사하는 것과 같다. 기본형을 옮기는 것은 기본형 변수를 복사하는 것과 같다. 및 참조타입 전달 참조타입 변수 "
복사와 동일합니다." 변수가 참조 유형의 값을 복사하면 변수 개체에 저장된 값의 복사본도 새 변수에 할당된 공간에 복사됩니다. 차이점은 값의 복사본이 실제로 포인터라는 점입니다. , 이 포인터는 힙에 저장된 개체를 가리킵니다. 복사 작업이 완료된 후 두 변수는 실제로 동일한 개체를 참조합니다. 따라서 변수 중 하나를 변경하면 다른 변수에 영향을 미칩니다.
[참고: 참조 유형의 값을 복사하는 것이 주소를 전달하는 유일한 방법입니다.]3. 매개변수는 실제로 함수의 지역 변수입니다.
---------------------------------- --- -------------
기본 개념 설명:
값 전송: A의 값을 B로 전송하고 B를 변경합니다. A는 그에 따라 변경되지 않으며 B는 A와 동일한 값을 저장합니다. 주소 전송: A의 주소를 B로 전송하고 B를 변경하면 A는 동시에 A의 주소만 저장합니다(컴퓨터 바로가기와 유사).
값 유형의 데이터는 스택의 변수에 저장됩니다. 즉, 스택에 메모리 공간을 할당하고, 담긴 값을 직접 저장하면, 그 값은 데이터 그 자체를 의미한다. 값 유형 데이터는 액세스 속도가 더 빠릅니다.
참조 유형의 데이터는 스택에 상주하지 않고 힙에 저장됩니다. 즉, 힙에 메모리 공간을 할당하는 것은 포함된 값을 직접 저장하는 것이 아니라, 저장할 값을 가리키며, 그 값은 가리키는 주소를 나타낸다. 참조형으로 데이터에 접근할 때에는 힙에 있는 실제 데이터를 참조하는 스택의 변수 내용을 확인해야 합니다. 참조형 데이터는 값형 데이터에 비해 저장공간이 크고 접근 속도가 느리다.
---------------------------------- --- -------------
세 가지 질문이 있습니다.
[질문 1]:
변경(a) 기능이 실행된 후 외부가 방해받지 않는 이유는 무엇입니까?
<script> var a = [1, 2, 3]; function change(a) { console.log(a);//[1,2,3] a = 2; //传值 console.log(a);//2 } change(a); console.log(a); //[1,2,3] </script>
[질문 2]:
변경(a) 기능이 실행된 후 외부가 왜 방해를 받나요?
<script> var a = [1, 2, 3]; function change() { a = 2;//传值 } change(); console.log(a); //2 </script>
분석: 질문 2와 질문 1의 차이점은 질문 2에는 매개변수가 도입되지 않아 변수 복사가 포함되지 않는다는 점입니다.
[질문 3]:
변경(a) 기능이 실행된 후 외부가 왜 방해를 받나요?
<script> var a = [1, 2, 3]; function change(b) { b[0] = 2; } change(a); console.log(a); //[2,2,3] </script>
실제로 변경 기능이 실행되면 매개변수 b는 a의 복사된 값입니다. a는 참조형이므로 함수 내에서 b와 a는 참조로 주소 객체에 접근합니다. b[0]=2가 발생하더라도 b와 a가 함수 내에서 동일한 객체를 참조한다는 사실에는 영향을 미치지 않습니다.
[질문 4]:
변경(a) 기능이 실행된 후 외부가 방해받지 않는 이유는 무엇입니까?
var a = [1, 2, 3]; function change(b) { console.log(b);//[1,2,3] b=2; b[0] = 2; } change(a); console.log(a); //[1,2,3]
위 내용은 이 글의 전체 내용입니다. 모두 마음에 드셨으면 좋겠습니다.