사전 컴파일 된 함수 호출

I. 서론

우리는 미리 컴파일 된 스크립트에 미리 컴파일 된 함수 호출에 대한이 부분의 이야기를 이야기한다.


둘째, 미리 컴파일 된 함수 호출

1. 공정

1. 활성 객체 AO (활성 개체) 만들기

2. 미리 컴파일 :

  • 범위 체인 생성 (범위 체인)
  • 초기화 인수
  • 초기화 매개 변수의 값은 매개 변수의 인수에 할당
  • AO에 가입 할 수있는 변수 이름에 따라, 모든 변수 선언을 찾기 존재하는 경우, 무시됩니다.
  • AO의 이름을 추가하는 기능으로, 모든 함수 선언 찾기, 같은 이름의 변수 또는 기능이 이미 존재하는 경우, 교체하십시오.
  • 이 초기화

3. 코드 실행 설명

2. 구문 분석

함수에서 선언 1. 모든 변수는 프리 컴파일 스테이지의 기능은 실제 기록 위치의 모든 변수가 독립적으로 완료된다.

function f() {
    console.log(aa); // undefined
    var aa = 5;
    console.log(aa); // 5
}
f();
复制代码

함수 2. 모든 함수 선언의 진행률 기능 실제 기록 위치에 관계없는 모든 변수를 선언이 미리 컴파일.

function f() {
    console.log(haha);
    function haha() {
        console.log(123);
    }
}
f();
复制代码

3. 함수는 동일한 이름의 변수 및 함수는 다음 함수는 변수를 덮어됩니다.

function f() {
    console.log(haha);
    var haha = 123;
    function haha() {
        console.log(456);
    }
}
复制代码

4. 기능만을 변수를 포함 할 수있는 기능이 기능은 덮어 쓰기 할 수 없다.

function f() {
    console.log(haha);
    function haha() {
        console.log(123);
    }
    var haha = 456;
}
f();
复制代码

이 함수는 함수 선언은 다시 이전의 함수 선언을 덮어하고, 매개 변수는 무시됩니다.

function f() {
    console.log(haha);
    function haha(a) {
        console.log('aaa');
    }
    function haha(a, b) {
        console.log('bbb');
    }
}
f();
复制代码

함수가있는 경우 6. 변수가 발생하거나 기능을하지 않을 경우, 그것은 GO가 도달 할 때까지 위 AO 정의 찾을 수 있습니다, 자신의 변수와 AO에 정의 된 기능에 우선 순위를 부여 액세스해야하는, 미리 컴파일.

var scope = 'global';
function t() {
    console.log(scope); // undefined
    var scope = 'local';
    console.log(scope); // local
}
t();
console.log(scope); // global
复制代码

셋째, 마음의지도 섹션

원본 주소 : github.com/Knight174/M ...

추천

출처blog.csdn.net/weixin_33763244/article/details/91399437