>  기사  >  웹 프론트엔드  >  JavaScript의 선언 호이스팅 소개(코드 예)

JavaScript의 선언 호이스팅 소개(코드 예)

不言
不言앞으로
2019-03-05 14:40:542615검색

이 글은 JavaScript의 구문 승격(코드 예제)에 대한 소개를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 개요

JS에서는 코드가 문장 단위로 실행되는 것을 당연하게 여기지만, 이는 완전히 틀린 것은 아닙니다.

singer = "周杰伦";
var singer; 
console.log(singer); // 周杰伦

sing();  // 故事的小黄花
function sing() {
   console.log("故事的小黄花");
}

위의 첫 번째 코드 조각이 일반적인 프로세스를 따르면 결과는 'Jay Chou'가 됩니다. var singer会重新把值默认声明为 undefined

위의 두 번째 코드 조각은 먼저 실행된 다음 선언되고 오류가 발생한다는 의미로 이해됩니다. 보고될 예정이지만 결과는 그렇지 않습니다.

위의 코드 블록은 실제로 다음과 같이 다시 작성할 수 있습니다.

var singer = undefined;
singer = "周杰伦";
console.log(singer); // 周杰伦
function sing() {
   console.log("故事的小黄花");
}
sing();  // 故事的小黄花

이유는 다음과 같습니다.

JS 정의 선언은 컴파일 단계에서 수행되고 할당 및 기타 작업은 실행 단계에서 수행됩니다.

그래서

선언, 그다음 할당, 실행이 바로 변수와 함수의 선언 호이스팅입니다.

2. 함수 선언이 변수 선언보다 우선합니다.

var foo = "bar";
function foo() {
   
}
typeOf(foo);  // string

var foo = "bar";
function foo() {
   
}
typeOf(foo);  // string

함수 선언이 변수 선언 앞인지 뒤에 있는지에 관계없이 변수 선언이 함수 선언을 덮습니다.

3. 각 도메인이 개선됨을 선언합니다.

다음 코드는 10을 출력합니다. 이유는 무엇입니까?

var foo = 1;
function bar() {
   if (!foo) {
       var foo = 10;
   }
   alert(foo);
}
bar();

이유:

모든 도메인은 소유권 주장 승격을 거칩니다.

위 코드는 다음과 같습니다.

var foo = 1;
function bar() {
   var foo = undefined;
   if (!foo) { // !foo === true
       var foo = 10;
   }
   alert(foo);
}
bar();

4. 함수 표현식은 승격을 선언하지 않습니다

먼저 함수 표현식이란 무엇인가요?

// 函数声明
function foo() {
   console.log("函数声明");
}

// 函数表达式
var foo = function() {
   console.log("函数表达式");
}

함수 표현식은 승격을 선언하지 않으므로 다음과 같습니다.

foo();  // Uncaught TypeError: foo is not a function

// 函数表达式
var foo = function() {
   console.log("函数表达式");
}

요약

변수 선언 및 함수 선언을 포함하여 JavaScript에는 선언 승격을 위한 메커니즘이 있습니다. JS 엔진은 컴파일 타임에 각 범위에 대한 선언을 찾는 반면, 할당 및 작업은 실행 타임에 발생합니다.

함수 정의는 함수 선언과 함수 표현식으로 구분됩니다. 함수 선언에는 선언 승격이 있지만 함수 표현식에는 그렇지 않습니다.

위 내용은 JavaScript의 선언 호이스팅 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제