1. 각 JavaScript 함수는 JavaScript 엔진에서만 액세스할 수 있는 내부 속성 [[Scope]]을 갖는 Function 개체의 인스턴스입니다. Scope]]는 "범위 체인"이라고 하는 범위 컬렉션을 저장합니다. 이 컬렉션은 "변수 개체" VO 또는 "활성 개체" AO를 저장합니다(AO는 VO보다 this 및 인수 속성이 더 많습니다).
2. 함수가 생성되면 상위 범위의 범위 체인에 있는 모든 변경 가능한 객체가 [[scope]]에 추가됩니다(상위 범위가 전역인 경우 현재 함수의 범위 체인에 하나의 전역 개체만 추가됩니다.
3. 함수가 실행되면 함수의 실행 환경이 환경 스택으로 푸시됩니다.
1. 이때 함수의 변수 초기화 단계에 들어갑니다. 이 단계에서는 이 값, 함수 매개변수, 함수 선언, 변수 선언 및 인수를 결정합니다. 현재 함수의 활성 개체 AO가 형성됩니다. 그러면 AO 개체가 현재 함수 범위 체인의 맨 위에 저장됩니다.
참고: AO는 다음 순서로 채워집니다.
1. 함수 매개변수(매개변수가 전달되면 값이 할당되고, 매개변수가 전달되지 않으면 초기값이 정의되지 않음), 두 번째 우선순위
2. 함수 선언(이름 충돌이 발생하면 덮어쓰임)이 가장 우선순위가 높습니다
3. 변수 선언 (변수 값을 undefine으로 초기화, 이름 충돌이 발생하면 무시됨) 3순위
2. 다음은 함수의 실행 단계입니다. 이 단계에서는 현재 함수의 [[Scope]] 범위 체인에서 현재 함수에 사용된 모든 변수와 함수 선언을 검색합니다. 현재 함수의 AO 객체가 상위 객체를 검색하지 않으면 최종적으로 전역 객체를 찾습니다(변수는 다음과 같습니다). 정의되지 않음).