1. JavaScript 함수의 범위 체인은 정의 시간 범위 체인과 런타임 범위 체인으로 구분됩니다.
2. 함수가 정의되면 정의 범위 체인을 나타내는 [[scope]] 속성이 있습니다. 정의 범위 체인 [[scope]]은 다음 규칙을 따릅니다. 함수의 정의 범위 체인 [[scope]]는 항상 해당 함수가 위치한 외부 함수의 실행 범위 체인
3. 전역 함수의 정의 범위 체인에는 창 속성만 포함됩니다.
4. 함수가 실행될 때 범위 체인은 정의될 때 항상 범위 체인의 선두에 있는 현재 활성 개체로 푸시됩니다(이것은 인수, 매개 변수 및 지역 변수를 포함합니다).
5. 함수가 실행될 때 변수 주소 지정은 항상 범위 체인의 위에서 아래로 검색되므로 전역 변수의 주소 지정 속도가 가장 느립니다.
6. 내부 기능이 실행되면 전체 범위 체인에 계속 액세스할 수 있습니다. 이것이 클로저가 런타임에 완성된 외부 함수에 의해 정의된 변수에 액세스할 수 있는 이유입니다.
7. 함수 실행 중에 with 문이 발견되면 with로 지정된 개체의 모든 속성이 일시적으로 범위 체인의 맨 위로 푸시됩니다.
8. 함수 실행에서 catch가 발생하면 catch로 지정된 오류 개체가 범위 체인의 상단인 범위 체인의 상단으로 일시적으로 푸시됩니다.
이해를 돕기 위해 예를 들어 범위 체인을 그려 보겠습니다.
다음과 같은 코드가 있습니다.
다음과 같이 코드 코드를 복사합니다.
함수 할당이벤트(){
var id = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
saveDocument(id);
};
}
이 Closure 함수에 의해 생성된 익명 클로저를 호출하고, 다음 그림을 그려서 할당이벤트가 실행될 때의 스코프 체인과 클로저가 정의될 때의 스코프 체인을 보여줍니다.