범위 지정 체인

4154 단어 javascript
Javascript에서 함수를 호출하면 새 가 생성되고, 생성되면 해당 함수에 대한 범위 체인이 생성됩니다. 범위 체인은 이 실행 컨텍스트가 액세스할 수 있는 변수와 기능을 정의합니다.

현재 실행 중인 자바스크립트 파일인 전역 컨텍스트가 있습니다. 실행 스택의 모든 실행 컨텍스트가 전역 컨텍스트와 환경 레코드에 액세스할 수 있다고 가정하는 것이 안전합니다. 다음 코드를 고려하십시오.

let globalVar = "this is the global context.";

function one() {
   const insideOne = "this is inside of function one.";
   globalVar = "I have access to globalVar here.";
   console.log(globalVar);

   two();

   function two() {
      const insideTwo = "this is inside of function two.";
      globalVar = "I also have access to globalVar in function two."
      console.log(insideOne, insideTwo, globalVar)
   };

};

function three() {
   const insideThree = "this is inside function three.";
   globalVar = "I also have access to globalVar in function thre.";
   console.log(insideThree, globalVar);
   console.log(insideOne);
};

one();
three();


콘솔에서 이것을 실행하면 변수 function three()를 호출하려고 시도하는 insideOne의 마지막 줄에 도달할 때까지 메시지가 표시됩니다. 현재 범위 체인 외부에 있기 때문에 insideOne에 액세스할 수 없습니다. 해당 변수는 function one()function two() 의 실행 컨텍스트에만 존재합니다. 그것들이 실행 스택에서 지워지면 자바스크립트는 메모리에서 그것들을 지웁니다.

중첩 함수에서 변수 insideOneglobalVar 에 액세스할 수 있는 방법에 주목하세요. 실행 컨텍스트가 함수의 범위를 만들 때 부모 함수의 변수 개체를 유지 관리합니다. 전역 컨텍스트는 자바스크립트 파일에서 호출되는 모든 함수의 부모입니다. 앞서 언급했듯이 globalVar 와 같은 전역 변수에 항상 액세스할 수 있습니다. function two()function one() 안에 중첩되어 있기 때문에 function one() 에 선언된 모든 변수에도 액세스할 수 있습니다. 재미있는 사실은 이 범위 지정 체인이 closures 생성 방법이라는 것입니다.

함수를 선언하기 전에 내가 two()를 호출했다는 것을 눈치채셨을 것입니다. 내 에서 그것에 대해 읽을 수 있습니다.

좋은 웹페이지 즐겨찾기