>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술의 변수 복사, 매개변수 전달 및 범위 체인에 대한 간략한 분석

JavaScript_javascript 기술의 변수 복사, 매개변수 전달 및 범위 체인에 대한 간략한 분석

WBOY
WBOY원래의
2016-05-16 15:20:161186검색

오늘 책을 읽다가 현재 자바스크립트에 대해 알고 있는 지식 중 막연한 점을 발견했습니다. 바로 JS의 스코프 체인에 관한 내용입니다. 그래서 정보를 찾아보고 책을 읽으면서 스코프 체인에 관련된 내용을 공부했습니다. 오늘의 스터디노트에는 변수, 매개변수 전달, 실행 환경, 변수 객체, 스코프 체인 등의 키워드가 주로 포함되어 있습니다.

1. 변수

변수에 관해 주의할 점은 변수 선언과 변수 값 복사라는 두 가지입니다.

JS에서는 모두 var 키워드를 통해 변수를 선언합니다. JS에서는 var로 선언된 변수가 가장 가까운 환경에 추가되도록 규정하고 있습니다. var 키워드를 사용하지 않고 변수를 선언하고 초기화하면 해당 변수가 전역 환경에 추가됩니다.

변수 값 복사는 변수 종류에 따라 복사 과정이 다릅니다. 변수가 기본형 변수인 경우 변수값 복사 시 새로 복사된 변수에 새로운 공간이 할당되며, 변수가 참조형인 경우 두 변수값은 서로 영향을 미치지 않으며, 복사 작업은 실제로 두 개의 변수가 동일한 메모리 공간을 가리키도록 만듭니다. 그 중 하나가 수정되면 다른 변수도 그에 따라 변경됩니다. "Javascript Advanced 프로그래밍"의 그림은 실제로 매우 생생합니다.

 

2. 매개변수 전달

JavaScript로 전달되는 모든 매개변수는 값으로 전달됩니다. 기본 유형을 매개변수로 사용할 때 일반적으로 혼동이 없습니다. 참조 유형을 매개변수로 사용하는 경우 다음 예와 유사합니다.


function setName(obj){
obj.name = "tom";
}
var person = new Object();
setName(person);
alert(person.name);//显示tom 
이 예에서는 setName의 변수 내용을 수정했으며 함수 외부에도 적용되었습니다. 처음에는 프로그램을 실행하면 unundefined나 error가 뜰 줄 알았는데, 함수 범위에서 수정된 값이 떴습니다. 매개변수 전달의 전체 과정을 분석한 결과, 이러한 의문점은 해결되었습니다. 매개변수 전달 과정에서 변수 값을 복사하는 매우 중요한 단계가 있습니다. 함수를 호출하면 실제로 obj=person이라는 단계를 수행하게 되는데, 따라서 위에서 언급한 참조형 변수 값을 복사하는 특성에 따라 obj를 수정하면 person의 값도 수정하게 됩니다. 따라서 JS 매개변수가 값으로 전달되는 방식은 값으로만 ​​전달될 수 있습니다.


 

3. 실행환경, 변수객체, 스코프체인

실행 환경과 실행 환경에 대한 나의 이해는 클래스 및 객체와 다소 유사합니다.


실행 환경은 함수가 액세스할 수 있는 변수, 함수 및 기타 데이터를 정의합니다. 이 실행 환경이 활성화되면 파서에서 사용할 수 있도록 이 실행 환경을 기반으로 변수 개체가 생성됩니다. 실행 환경은 클래스와 같으며 변수 객체는 객체에 해당합니다.


실행 환경이 활성화되면 실행을 위해 스택의 맨 위로 푸시되고 완료되면 실행되기 전에 스택과 스택에 들어간 환경에서 제거되므로 에.


스코프 체인은 변수 객체를 저장하는 스택과 같습니다. 실행 환경이 일찍 활성화될수록, 현재 활성화된 실행 환경의 변수 객체가 스택의 맨 위에 위치합니다. . 현재 실행 환경의 실행이 완료되면 스택 상단에 있는(실행 환경에 해당하는) 변수 객체를 스택 상단에서 제거해야 합니다.


실행 환경이 실행 중일 때 파서는 범위의 최상위, 즉 현재 실행 환경에 해당하는 변수 개체부터 시작하여 변수 및 기타 데이터에 액세스해야 합니다. 찾을 수 없으면 내려갑니다. 외부 계층으로 필요한 객체를 찾거나 전역 환경의 변수 객체를 찾을 때까지 실행 환경에 해당하는 변수 객체에서 검색이 수행됩니다. 따라서 이 검색 방법은 전역 환경에 정의된 변수가 너무 많으면 프로그램 성능에 영향을 미친다는 사실도 보여줍니다.


오늘 배운 내용은 주로 개념적이고 비교적 추상적인 내용입니다. 하지만 이 부분은 클로저, 상속, 프로토타입 등 모든 후속 지식의 기초가 됩니다. 이 부분의 내용을 잘 이해해야만 더 명확하게 배울 수 있으므로 이 부분을 반복해서 공부해야 합니다. 과거를 복습함으로써 새로운 것을 배울 수 있다고 믿어야 합니다. 고대인들은 나를 속이지 않을 것입니다 (。・∀・)ノ゙


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.