VAR 키워드를 사용한 사전 설명
먼저이 코드 실행 결과를 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
경고 (n); // 정의되지 않은 팝업
var n = 10;
팝업의 결과는 정의되지 않았습니다. 왜 10이 아닌가? 다음 코드 실행 결과를 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
경고 (n);
n = 10;
운영 보고서는 다음과 같습니다.
이번에 오류 보고서는 코드가 실행될 때 변수 n이 선언되지 않는다는 것입니다. 이 두 코드의 비교를 통해 VAR 키워드가있는 변수와 VAR 키워드가없는 변수간에 차이가 있음을 알 수 있습니다. 코드가 실행되기 전에 브라우저는 초기 값을 정의하지 않은 것으로 보입니다. 따라서 코드가 실행되기 전에 브라우저 엔진 프로세스는 VAR 키워드 및 기능 키워드로 변수를 자동으로 스캔하고 코드가 실행되기 전에 정의 된 기능 및 함수를 사전 상영이라고합니다.
기능 키워드가있는 사전 탐색
다음 코드 실행 결과를 보자.
코드 사본은 다음과 같습니다.
fn (); // popt 안녕하세요
함수 fn () {
경고 ( 'Hello');
}
실행 결과가 팝업되고 FN은 정상적으로 실행될 수 있습니다. 그 이유는 코드가 실행되기 전에 FN이 사전 설명되기 때문입니다. FN은 사전 탐색 중에 정의 (정의)되었습니다. 우리는 왜 첫 번째 코드 실행 결과가 10 개의 팝업되지 않지만 정의되지 않은지 다시 질문이 있습니다. 또 다른 개념이 다시 소개됩니다.
JavaScript에서 선언 및 정의
우리는 일반적으로 VAR 키를 사용하여 변수를 선언하고 함수 키워드를 사용하여 함수를 정의합니다. 그러나 함수 키워드는 동시에 함수를 선언하고 정의하지만 VAR은 변수 만 선언 할 수 있으며 정의 기능이 없습니다.
다음은 VAR 키워드로 선언 된 변수입니다.
코드 사본은 다음과 같습니다.
var n; // 변수 n을 선언합니다
var m = 10; // 변수 m을 선언하고 10 할당
다음은 함수 키워드로 정의 된 함수입니다.
코드 사본은 다음과 같습니다.
// 함수 정의 fn
함수 fn () {
경고 ( 'Hello');
}
VAR 키워드 및 기능 키워드의 사전 탐험의 차이
실제로, 둘 사이의 차이점은 VAR 키워드로 사전 설명 할 때 선언 부분 만 사전 설명되어 (스스로 정의 할 수있는 능력이 없기 때문에), 함수 키워드를 사전 설명 할 때 선언 및 정의는 동시에 사전 설명된다는 것입니다. 그런 다음 첫 번째 코드를 다시 분석하고 다음과 같이 분석합니다.
비 전도성의 사전 탐색 (사기)
왜 비 전통적이라고 하는가? 다음 코드를 참조하십시오 (Firefox 제외) :
코드 사본은 다음과 같습니다.
경고 (n);
fn ();
if (false) {
var n = 10;
함수 fn () {
경고 ( 'Hello');
}
}
Undefined는 첫 번째 코드 실행 라인에서 팝업되며 Code Execution의 두 번째 줄에서 Hello가 나타납니다. 코드 실행 전에 n과 fn이 사전 설명되어 있기 때문입니다. 조건이 허위로 판단 되더라도 영구 브라우저 엔진은 VAR 키워드로 선언 된 변수 N을 스캔하고 기능 키 정의로 FN을 스캔합니다.
*사전 해석은 재정의가 아니라 재분배를 무시합니다
이 장소는 상대적으로 엉키고 이해하기 쉽지 않기 때문에 별표가 추가되었습니다. 다음 코드를 참조하십시오.
코드 사본은 다음과 같습니다.
경고 (n);
var n = 10;
var n = 9;
var n;
경고 (n);
이 코드의 실행 결과는 무엇입니까? 분석하자 :
코드를 계속 업로드하고 다음 실행 결과를 분석하십시오.
코드 사본은 다음과 같습니다.
fn ();
함수 fn () {
경고 ( '1');
}
fn ();
함수 fn () {
경고 ( '2');
}
fn ();
코드 분석 다이어그램은 다음과 같습니다.
함수 정의를 통한 함수 사전 탐색 분석
요약 :
이 블로그 게시물은 큰 코드와 스크린 샷을 사용하여 JavaScript의 사전 상영을 개요합니다. 다양한 책을 살펴보면 사전 상영에 대한 설명은 거의 없습니다. 실제로 작업에 사용 된 시나리오는 많지 않습니다. 불행히도, 사전 상영은 주요 회사의 인터뷰 질문에서 꼭 봐야 할 일입니다. 내가 처음 접촉했을 때, 나는 그것이 상식에 따라 항상 코드를 쓰지 않았다고 생각했지만 때로는 정상적으로 실행될 수 있으며 오류를보고하지 않을 것입니다. 물론 이것은 또한 미스터리 탐색을 증가 시켰으며 브라우저 엔진이 코드를 어떻게 설명하고 실행하는지 더 이해할 수있었습니다. 후속 블로그 게시물에서 몇 가지 고전적인 사례를 사용하여 분석하겠습니다. 귀하의 지원에 다시 한번 감사드립니다!