자바 스크립트 범위 지정 문제 : 사전 분석, 분석 글로벌 및 로컬 범위, 범위 체인

범위 JS 문제를 이해하기 위해서, 우리는 먼저 브라우저가 스크립트 스크립트 코드를 읽어 JS 파서 브라우저, JS 파서 작업을 시작하는 방법을 이해해야합니다. 그 작업 단계는 두 부분으로 나누어 져 있습니다 : 

JS 파서 : 

1. "찾기 뭔가"(사전 구문 분석) : var에 함수 매개 변수 

예 :

 

   경고 (A); //찾으시는 주소가 없습니다

   A는 1 =있다;

   경고 (A); //1

   기능을 Fn1 () {경고 (2)}

 

JS 파서 먼저 VAR 함수 매개 변수를 사전 분석입니다 찾을 수 있습니다. 

정의되지 않은 A =으로 해결 var에 정의 된 변수을 발견했을 때, 특정 값을 읽지 않습니다. 즉, 모든 변수 공식 실행하기 전에 미리 모든의 값을 할당 - 정의되지 않은. 

읽기 연료 소모량이에 해결 :을 Fn1 = 기능을 Fn1 () {경고 (2);}. 공식 코드를 실행하기 전에 모든 기능, 전체 기능 블록 

라인별로 코드 라인의 2. 해석 : 

이 팝업 있도록 코드를 읽는 형식 JS JS 파서는, 첫째, 얻은 사전 분석 결과를 읽 첫 번째 정규 정의되지 않은, 공식적으로 사전이-해결 때 = 1, 그 다음, 얻어진 값을 수정합니다 읽을 때 팝업 1의 ​​값에.

 

 예 :

1

       경고 (A); // 주어진

       A = 1;

1

참고 : var에 성명이 없기 때문에 값이 미리 분석 이하이며, 브라우저는 불평 공식적인 독서에게 코드를 찾을 수 없습니다.

 

여기에 점차 범위의 이해를 심화 몇 가지 구체적인 예는 다음과 같습니다 

예 :

 

경고 (A); // 함수 A () {경고 (4)}

A는 1 =있다;

경고 (A); //1

A () {경고 (2)} 작동

경고 (A); //1

A가 3 =이있다;

경고 (A); //삼

A () {경고 (4)} 작동

경고 (A); //삼

A (); // 오류, 파서는 마지막 3을 저장하는 것입니다

 

분석 :

 

과정을 사전은-해결 :

        A = ...,

        A =는 () {경고 (2)} 작동

        A = ...,

        A =는 () {경고 (4)} 작동

주 : 브라우저 먼저 상기와 같이 미리 분석 결과를 분석하는 프리. 동일한 이름의 미리 파싱 발생 변수와 함수시 브라우저 함수 떠날 때, 동일한 이름의 복수의 기능의 얼굴을, 함수 선언 후 떠날 것이다. 공식 코드를 읽을 때, 그것은 사전 분석 값이 표현은 사전 분석의 값을 변경할 것을 명심 때 저장 수정합니다,하지만 함수 선언은 사전 분석의 값을 수정하지 않습니다.

 

예 :

 

A는 1 =있다;

기능을 Fn1 () {

    경고 (A);        

    2가있다;

}

을 Fn1 (); //찾으시는 주소가 없습니다

경고 (A); //1

 

분석 :

 

     Preresolution A는 정의되지는 =;

                을 Fn1 = 기능을 Fn1 () {

                      경고 (A);

                       2가있다;

                 }

    진보적 인 코드 읽기 : A는 1 =;

                 Preresolution A는 정의되지는 =;

                 진보적 인 코드 읽기 : A는 2 =을;

상술 한 바와 같이이 미리 파싱 정규 세션 회, 변수 함수, 팝업 (1)의 최종 값에서 함수 내에서만 작동을 정의.

 

예 :

 

A는 1 =있다;

기능을 Fn1 () {

       경고 (A);                 

       A = 2;

}

을 Fn1 (); //1

경고 (A); // 2

 

분석 : VAR 선언에 함수를 사전에 분석 함수의 정보를 찾을 수 없습니다, 여기에 사용되지 않습니다, 그것은 범위라고 범위 체인, A = 1 중 점프를 찾습니다.

 

예 :

 

A는 1 =있다;

기능을 Fn1 (a) {

       경고 (A);

       A = 2;

}

을 Fn1 (); //찾으시는 주소가 없습니다

경고 (A); //1

 

분석 : 때 함수 파라미터에 대응 VAR A = ..., A =는 preresolved 정의 함수이므로

 

          1. 사전 분석 :

                 A = ...,

                  기능을 Fn1 (a) {

                        경고 (A);

                        A = 2;

                  }

          2. 코드 라인을 읽기 :

                 글로벌 A = 1;

                 함수 호출하십시오 ... = 중고 파싱, 코드 A = 2 시브를 판독하지만, 외부 전역 변수 상수 값의 함수

예 :

 

A는 1 =있다;

기능을 Fn1 (a) {

       경고 (A);     

       A = 2;

}

을 Fn1 (a); // 1 :이 파라미터는 총량으로부터 유도되는 = 1;

경고 (A); //1

 

참고 : 매개 변수 1의 값은 함수 동안, 함수 매개 변수가 코드를 읽기 시작하기 시작합니다.

추천

출처www.cnblogs.com/tongguilin/p/12230156.html