범위 지정 체인
4154 단어 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()
의 실행 컨텍스트에만 존재합니다. 그것들이 실행 스택에서 지워지면 자바스크립트는 메모리에서 그것들을 지웁니다.중첩 함수에서 변수
insideOne
및 globalVar
에 액세스할 수 있는 방법에 주목하세요. 실행 컨텍스트가 함수의 범위를 만들 때 부모 함수의 변수 개체를 유지 관리합니다. 전역 컨텍스트는 자바스크립트 파일에서 호출되는 모든 함수의 부모입니다. 앞서 언급했듯이 globalVar
와 같은 전역 변수에 항상 액세스할 수 있습니다. function two()
가 function one()
안에 중첩되어 있기 때문에 function one()
에 선언된 모든 변수에도 액세스할 수 있습니다. 재미있는 사실은 이 범위 지정 체인이 closures 생성 방법이라는 것입니다.함수를 선언하기 전에 내가
two()
를 호출했다는 것을 눈치채셨을 것입니다. 내 에서 그것에 대해 읽을 수 있습니다.
Reference
이 문제에 관하여(범위 지정 체인), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/javila35/scoping-chain-50il텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)