많은 초보자들이 JavaScript의 실행 환경과 스코프 체인에 대해 잘 이해하지 못하고 있다고 생각합니다. 여기서는 제가 이해한 대로 공유하겠습니다.
일반적으로 실행 환경을 전역 실행 환경과 로컬 실행 환경으로 구분합니다. 로컬 실행 환경은 함수 실행 환경이라고도 합니다. 그렇다면 실행 환경이란 정확히 무엇입니까? 일반인의 관점에서 실행 환경은 코드가 실행되는 환경입니다. 다음 코드를 살펴보고 더 자세히 분석해 보겠습니다.
<script><br>var name="zhuzhenwei"; function changeName(){ if (name=="zhuzhenwei"){ name="heting"; }else{ name="zhuzhenwei"; } } changeName(); console.log(name); //heting<br></script>
위 코드에서 볼 수 있듯이 첫 번째 문장이 실행될 때 문장이 위치한 환경은 전역 실행 환경이다. 각 실행 환경에는 이와 관련된 변수 개체가 있습니다. 전역 실행 환경의 경우 이와 관련된 개체는 창 개체입니다. 그 직후 다음 명령문은 함수를 선언합니다(참고: 이것은 단지 함수 선언일 뿐이며 내부 코드는 호출될 때까지 실행되지 않습니다). 이 함수는 전역 실행 환경에도 있습니다. 마지막으로 우리는changeName() 함수를 호출했습니다. 함수가 호출되면 즉시changeName() 함수의 실행 환경(즉, 함수 실행 환경)으로 점프하고, 실행 환경에 들어가면 생성을 시작합니다. 함수 내부의 해당 변수(예: var가 함수에 나타난다고 가정) a=12; 이와 같은 코드), 함수를 호출하지 않으면 생성되지 않으며, 이와 관련된 변수 개체는 활성 개체로 간주됩니다(활성 개체에는 처음에 하나의 변수, 즉 인수 개체만 포함됩니다). , 위에서 아래 문을 실행합니다. 동시에 함수 환경에서 코드가 실행되면 변수 개체의 범위 체인이 생성됩니다. 이 범위 체인에는 ChangeName()의 변수 개체와 전역 변수 개체가 포함됩니다.
스코프 체인은 실제로 이를 통해 프런트 엔드에서 끝까지 액세스할 수 있는 범위입니다. 즉, 프런트 엔드가 참조하는 실행 환경에 액세스할 수 있는 모든 변수와 함수에 대한 질서 있는 액세스를 보장합니다. 현재 실행 중인 코드에 있는 변수 개체는 이제changeName() 함수의 변수 개체이고 끝은 전역 변수 개체입니다. 예를 들어 함수를 실행할 때 식별자를 찾아야 합니다. 범위 체인의 끝을 검색하는 것입니다. 범위 체인의 끝을 찾을 수 없으면 창 개체까지 위쪽으로 검색이 계속됩니다. 글로벌 환경의 스코프 체인에 대해서는 언급하지 않았지만 사실 스코프 체인은 글로벌 환경에도 존재하지만, 글로벌 변수 객체는 단 하나뿐입니다. 분명한 사실은 범위 체인을 검색할 필요가 없기 때문에 지역 변수에 액세스하는 것이 전역 변수에 액세스하는 것보다 빠릅니다. 분명히 범위 체인은 코드가 위치한 실행 환경에 따라 동적으로 변경됩니다.
changeName() 함수가 실행된 후, 즉 함수 실행 환경의 코드가 실행된 후 환경에 있는 지역 변수와 지역 객체는 즉시 소멸됩니다(변수를 선언하지 않은 경우). var, 로컬 환경의 코드가 실행된 후 전역 변수가 소멸되지 않음을 나타냅니다), 실행 환경은 함수 실행 환경에서 전역 실행 환경으로 변경되고 계속해서 console.log(name ); 성명. 그러나 웹페이지나 브라우저를 닫으면 글로벌 환경도 파괴됩니다.
요약하면 다음과 같습니다.
실행 환경도 범위가 되며, 실행 환경에 따라 변수의 생명주기가 결정됩니다.
실행 환경은 전역 실행 환경과 로컬 실행 환경으로 나누어 실행 환경에 들어갈 때마다 변수와 함수를 검색하는 스코프 체인이 생성되므로 이 스코프 체인이 동적으로 변경된다고 생각합니다. .
함수의 로컬 환경은 함수 범위의 변수에 액세스할 수 있을 뿐만 아니라 포함 환경(상위 환경) 및 전역 환경에도 액세스할 수 있지만 전역 환경은 정의된 변수에만 액세스할 수 있습니다. 전역 환경 및 함수(로컬 환경에서 var를 사용하여 선언되지 않은 변수도 전역 변수임)에서는 로컬 환경의 데이터에 액세스할 수 없습니다(정확히 전역 변수에 액세스할 수 있기 때문에 모든 데이터라고 말하는 것은 아닙니다). 참고: 함수의 매개변수는 함수의 지역 변수입니다.
위 내용은 JavaScript의 실행 환경(범위) 및 범위 체인에 대한 전체 내용입니다. 이 기사의 내용이 모든 사람의 학습이나 작업에 도움이 되기를 바랍니다. 메시지를 남겨서 소통할 수 있습니다. 더 많은 관련 내용을 알고 싶다면 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!