>웹 프론트엔드 >JS 튜토리얼 >자바스크립트 사전 컴파일은 무엇을 합니까?

자바스크립트 사전 컴파일은 무엇을 합니까?

醉折花枝作酒筹
醉折花枝作酒筹원래의
2021-07-22 11:36:292027검색

Javascript 사전 컴파일의 기능은 다음과 같습니다. 1. 엔진이 코드에 하위 수준 구문 오류가 있는지 확인하는 구문 분석 2. 사전 컴파일의 경우 간단한 이해는 메모리에 일부 공간을 열어 일부를 저장하는 것입니다. 변수와 함수 3. 이름에서 알 수 있듯이 해석과 실행은 코드를 실행하는 것입니다.

자바스크립트 사전 컴파일은 무엇을 합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

JavaScript 실행 3부작

  • 그램 분석

  • 사전 컴파일

  • 해석 및 실행

문법 분석은 매우 간단합니다. 즉, 엔진이 코드에서 하위 수준 구문을 확인합니다. 해석 및 실행 이름에서 알 수 있듯이 사전 컴파일을 간단히 이해하면 일부 변수와 함수를 저장하기 위해 메모리에 일부 공간을 마련하는 것입니다.

사전 컴파일은 언제 발생하나요? 사전 컴파일은 스크립트에서만 발생한다고 잘못 알고 있습니다. 내부 코드 블록이 실행되기 전 사전 컴파일은 문제가 없지만 대부분 사전 컴파일이 발생합니다.

분석 예시

먼저 다음 두 개념을 구별하고 이해해 봅시다: 변수 선언 var... 함수 선언 function(){}

<script>
var a = 1;
console.log(a);
function test(a) {
  console.log(a);
  var a = 123;
  console.log(a);
  function a() {}
  console.log(a);
  var b = function() {}
  console.log(b);
  function d() {}
}
var c = function (){
console.log("I at C function");
}
console.log(c);
test(2);
</script>

분석 과정은 다음과 같습니다.

    GO 전역 개체(즉, 창 개체)는 페이지가 생성될 때 생성됩니다.
  • 스크립트가 로드된 후 구문이 적합한지 분석합니다.
  • 사전 컴파일을 시작하여 GO 속성으로 변수 선언을 찾고 값을 정의되지 않음에 할당합니다.

  • GO 속성으로 함수 선언을 찾아 함수 본문에 값을 할당합니다.

    //抽象描述
        GO/window = {
            a: undefined,
            c: undefined,
            test: function(a) {
                console.log(a);
                var a = 123;
                console.log(a);
                function a() {}
                console.log(a);
                var b = function() {}
                console.log(b);
                function d() {}
            }
        }

    실행 코드 설명(test(2) 함수를 호출하는 문장이 실행될 때까지)
  • //抽象描述
        GO/window = {
            a: 1,
            c: function (){
                console.log("I at C function");
            }
            test: function(a) {
                console.log(a);
                var a = 123;
                console.log(a);
                function a() {}
                console.log(a);
                var b = function() {}
                console.log(b);
                function d() {}
            }
        }
  • 함수 test() 실행 전 프리컴파일이 발생함

AO 액티브 객체(Active Object) 생성;

Find Formal 매개변수 및 변수 선언에 값이 할당됩니다.

  • 실제 매개변수 값이 형식 매개변수에 할당됩니다.

  • 함수 선언을 찾아 값을 함수 본문에 할당합니다. 사전 컴파일 전의 두 가지 작은 단계 1과 2는 다음과 같습니다.

    //抽象描述
        AO = {
            a:undefined,
            b:undefined,
        }

    사전 컴파일의 세 번째 단계는 다음과 같습니다.
  • //抽象描述
            AO = {
                a:2,
                b:undefined,
            }
  • 사전 컴파일의 네 번째 단계는 다음과 같습니다.

    //抽象描述
        AO = {
            a:function a() {},
            b:undefined
            d:function d() {}
        }

    다음 프로세스 변경은 다음과 같습니다. test() 함수를 실행할 때:
  • //抽象描述
        AO = {
            a:function a() {},
            b:undefined
            d:function d() {}
        }
        --->
        AO = {
            a:123,
            b:undefined
            d:function d() {}
        }
        --->
        AO = {
            a:123,
            b:function() {}
            d:function d() {}
        }
  • 실행 결과:

참고:

변수 선언 및 함수 선언은 사전 컴파일 단계에서 발생하며 초기화 동작(할당)이 없으며 익명 함수는 참여하지 않습니다. 사전 컴파일; 변수 초기화는 해석 및 실행 단계에서만 발생합니다.

사전 컴파일(함수 실행 전)

Creation AO 객체(활성 객체)

자바스크립트 사전 컴파일은 무엇을 합니까?

함수 내에서 함수 형식 매개변수와 변수 선언을 찾습니다. 형식 매개변수 이름과 변수 이름은 AO 객체의 속성으로 사용됩니다. 값은 정의되지 않습니다

실제 매개변수와 형식 매개변수가 통일되어 실제 매개변수 값이 할당됩니다. 형식 매개변수에 대한 함수 선언을 찾아보세요

  • 함수 이름은 AO 객체의 속성으로 사용되며 값은 함수 참조

  • 사전 컴파일(스크립트 코드 블록 스크립트 실행 전)

  • 전역 변수 선언 찾기(포함) 암시적 전역 변수 선언, var 선언 생략), 변수 이름은 전역 객체의 속성으로 사용되며, 값은 정의되지 않습니다

  • 함수 선언을 찾으면, 함수 이름은 전역 객체의 속성으로 사용되며, 값은 함수 참조입니다

사전 컴파일 요약

  • 사전- 컴파일을 위한 두 가지 작은 규칙

  • 함수 선언의 전반적인 개선 - (구체적으로는 함수 호출 및 선언이 이전인지 여부에 관계 없음) 또는 이후에는 항상 함수 선언을 호출 앞으로 이동합니다.)

변수 선언 개선 -(구체적으로는 변수 호출 및 선언 위치가 이전이든 이후이든 관계없이 시스템은 항상 호출 전에 선언을 이동하세요. 선언일 뿐이므로 값이 정의되지 않습니다.)

    • 미리 컴파일된 prelude
    • 글로벌은 선언되지 않고 값이 할당된 경우 모든 변수를 의미합니다. 이면 이 변수는 전역 변수의 소유가 됩니다. (전역 도메인은 Window입니다.)

    선언된 모든 전역 변수는 window의 속성입니다. var a = 12; Window.a = 12;
    • 함수 사전 컴파일은 함수 실행 순간에 발생합니다.
    • 【추천 학습:
    • javascript 고급 튜토리얼

위 내용은 자바스크립트 사전 컴파일은 무엇을 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.