>  기사  >  웹 프론트엔드  >  자바스크립트로 호이스팅?

자바스크립트로 호이스팅?

PHPz
PHPz원래의
2024-07-17 10:40:29705검색

Hoisting in javascript ?

“호이스팅은 코드 실행 전 컴파일 단계에서 모든 변수와 함수 선언이 포함 범위의 맨 위로 이동하는 JavaScript의 동작입니다.”

이 정의는 어디에서나 접할 수 있지만 “모든 변수와 함수 선언이 물리적으로 코드 상단에 있다는 것은 잘못된 믿음입니다.” 이는 사실이 아닙니다!

하지만 대신 모든 변수와 함수 선언을 호이스팅할 때 컴파일에서 코드가 실행되기 전에 이미 메모리가 할당되어 입력한 위치에 정확하게 유지됩니다.

그럼 var/let/const와 함수가 어떻게 호이스팅되는지 알아보겠습니다.

다음은 몇 가지 예입니다.

console.log(a) // undefined
console.log(b) // ReferenceError
console.log(c) // ReferenceError

var a = 10;
let b = 20;
const c = 30;

var로 선언된 변수는 호이스팅되며 컴파일 시간 동안 var 변수는 undefine 값으로 메모리에 할당됩니다. 선언하기 전에 var를 콘솔할 때 undefine이 되는 이유는 무엇입니까?

const/let으로 선언된 변수도 호이스팅되지만 undefine으로 초기화되지는 않습니다. 선언 전에는 액세스할 수 없습니다. 그렇지 않으면 ReferenceError가 발생합니다. 이는 변수가 존재하지만 초기화되지 않은 시간인 Temporal Dead Zone 때문입니다.

하지만 기능은 어떨까요

그럼 함수를 어떻게 선언하느냐에 따라 달라집니다. 아래를 참조하세요.

greet1();
greet2();
greet3();
greet4();

//function declaration is full hoisted
function greet1(){
    console.log("greet1");
}

// TypeError: greet2 is not a function
var greet2 = function(){
    console.log("greet2");
}

 // ReferenceError: Cannot access 'greet3' before initialization
let greet3 = function(){
    console.log("greet2");
}

// ReferenceError: Cannot access 'greet4' before initialization
const greet4 = function(){
    console.log("greet2");
}

기존 함수 선언은 완전히 호이스팅되어 있어 코드 전체에서 이를 호출할 수 있습니다.

하지만 함수 표현식을 사용하면 선언되기 전에는 이를 수행할 수 없습니다. 이것이 변수로 선언된 세 개의 함수가 오류를 발생시키는 이유입니다. 따라서 함수 표현식을 함수 선언으로 변경하거나 선언 후에 함수를 호출하는 두 가지 옵션이 있습니다.

위 내용은 자바스크립트로 호이스팅?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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