이 글은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!