js 함수 실행 과정
2397 단어 js
var outerVar1="variable in global code";
function fn1(arg1, arg2){
var innerVar1="variable in function code";
function fn2() { return outerVar1+" - "+innerVar1+" - "+" - "+(arg1 + arg2); }
return fn2();
}
var outerVar2=fn1(10, 20);
처리 과정은 대략 다음과 같다. 1.Global Object 즉 window 대상을 초기화합니다. Variable Object는 window 대상 자체입니다.Scope Chain 객체를 scope_로 가정합니다.1, 윈도우 대상만 포함됩니다.2. JS 소스 코드(소스 코드를 읽고 문법 분석 과정이 있을 수 있음)를 스캔하여 결과에서 정의된 변수 이름, 함수 대상을 얻을 수 있다.스캔 순서: 2.1 변수 outerVar1을 발견하고 윈도우 대상에 outerVar1 속성을 추가하며 값은undefined입니다.2.2 함수 fn1의 정의를 발견했습니다. 이 정의를 사용하여 함수 대상을 만들고 생성 과정에 전달된 Scope Chain은scope_일.결과를 윈도우의 속성에 추가합니다. 이름은 fn1이고 값은 되돌아오는 함수 대상입니다.fn1의 내부를 주의하세요 [[Scope]] 바로 scope_일.또한 창설 과정은 함수체 중의 JS 코드에 대해 특별한 처리를 하지 않으며, 함수체 JS 코드의 스캐닝 결과를 함수 대상의 내부 속성에 저장하고 함수가 실행될 때 진일보한 처리를 하는 것으로 이해할 수 있습니다.이것은 Function 코드, 특히 삽입 함수 정의의 Variable Instantiation을 이해하는 데 매우 관건적이다.2.3 변수 outerVar2를 발견하고 윈도우 대상에 outerVar2 속성을 추가하며 값은undefined이다.3. outerVar1 부치 문장을 실행하고 부치는'variable in global code'입니다.4. 함수 fn1을 실행하고 반환 값을 얻습니다: 4.1 Activation Object를 만들고 activation_로 가정합니다일;scope_로 가정한 새 Scope Chain 만들기2,scope_2에서 첫 번째 객체는 activation_1, 두 번째 대상은 윈도우 대상(fn1의 [[Scope]], 즉 scope_1의 내용에서 얻은 것)이다.4.2 매개변수 목록을 처리합니다.activation_1에 속성arg1,arg2를 설정하고 값은 각각 10,20입니다.arguments 대상을 만들고 설정합니다. arguments를 activation_로 설정합니다.1의 속성;4.3 fn1의 함수체에 대해 유사한 단계 2의 처리 과정을 수행: 4.3.1 변수 innerVar1 발견,activation_1 대상에 innerVar1 속성을 추가하고 값은 undefine입니다.4.3.2 함수 fn2의 정의를 발견했습니다. 이 정의를 사용하여 함수 대상을 만들고 생성 과정에 전달된 Scope Chain은scope_2(함수 fn1의 Scope Chain은 현재 실행 컨텍스트의 컨텐트임).activation에 결과 추가_1의 속성에서 이름은 fn2이고 값은 되돌아오는 함수 대상입니다.fn2의 내부를 주의하세요 [[Scope]] 바로 scope_이;4.4 innerVar1 부치 문장을 실행하고 부치는 "variable in function code"입니다.4.5 실행 fn2: 4.5.1 Activation Object 만들기, activation_이;scope_로 가정한 새 Scope Chain 만들기3,scope_3에서 첫 번째 객체는 activation_2, 다음 대상은 activation_1. 윈도우 개체(fn2의 [[Scope]], 즉 scope_2);4.5.2 처리 매개변수 목록입니다.fn2에 인자가 없기 때문에arguments 대상을 만들고 activation_로 설정합니다2의 속성입니다.4.5.3 fn2의 함수체에 대해 유사한 단계 2의 처리 과정을 실행하고 변수 정의와 함수 성명을 발견하지 못했다.4.5.4 실행 함수체.모든 변수에 대한 인용, scope_3에서 검색합니다. 이 예시에서 outerVar1은 윈도우에서 찾을 것입니다.innerVar1,arg1,arg2는 activation_1에서 찾습니다.4.5.5 scope_ 무시3、activation_2 (쓰레기를 회수할 수 있다는 뜻).4.5.6은 fn2의 반환값을 되돌려줍니다.4.6 비활성화 _1、scope_이.4.7 결과를 반환합니다.5. 결과를 outerVar2에 할당
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.