> 웹 프론트엔드 > JS 튜토리얼 > JS에서 호이스팅(참조 오류!!)

JS에서 호이스팅(참조 오류!!)

Susan Sarandon
풀어 주다: 2024-12-31 02:27:10
원래의
227명이 탐색했습니다.

HOISTING IN JS (REFERENCE ERROR!!)

JavaScript 호이스팅 이해

호이스팅은 JavaScript의 가장 기본적인 개념 중 하나이지만 초보자는 물론 숙련된 개발자에게도 혼란을 야기할 수 있습니다.

이 블로그에서는 이 개념을 완전히 이해하는 데 도움이 되도록 호이스팅의 신비를 풀고, 작동 방식을 설명하고, 명확한 예를 제공합니다.

호이스팅이란 무엇인가요?

호이스팅은 변수, 함수 및 클래스 선언컴파일 단계에서 범위의 맨 위로 이동되는 JavaScript 메커니즘입니다.

즉, 코드에서 실제로 선언되기 전에 이러한 요소를 사용할 수 있습니다.

그러나 호이스팅은 var, let, const, 함수, 클래스에 대해 다르게 작동하며, 여기서 혼동이 자주 발생합니다

호이스팅 작동 방식

JavaScript 코드가 실행되면 두 단계를 거칩니다.

  1. 컴파일 단계: 이 단계에서 엔진은 선언을 해당 범위의 맨 위로 끌어올립니다.

  2. 실행 단계: 코드는 호이스팅 규칙을 준수하면서 한 줄씩 실행됩니다.

다른 선언에 대한 호이스팅 규칙

1. 변수

var로 선언된 변수는 호이스팅되지만 값은 초기화되지 않습니다. 초기화 전에는 정의되지 않음으로 설정되어 있습니다.

console.log(a); // Output: undefined
var a = 10;
console.log(a); // Output: 10
로그인 후 복사
  1. let과 const

let 및 const로 선언된 변수도 호이스팅되지만 TDZ(Temporal Dead Zone)에 남아 있습니다. 코드에서 해당 선언이 나타날 때까지 액세스할 수 없습니다.

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 20;

로그인 후 복사
console.log(c); // ReferenceError: Cannot access 'c' before initialization
const c = 30;
로그인 후 복사
  1. 기능

함수 선언은 완전히 끌어올려집니다. 즉, 이름과 본문이 모두 맨 위로 이동됩니다. 이를 통해 함수가 선언되기 전에 호출할 수 있습니다.

greet(); // Output: "Hello, World!"

function greet() {
    console.log("Hello, World!");
}

로그인 후 복사

그러나 함수 표현식은 다르게 취급됩니다. var, let 또는 const로 선언된 변수처럼 동작합니다.

sayHi(); // ReferenceError: Cannot access 'sayHi' before initialization

const sayHi = function () {
    console.log("Hi!");
};
로그인 후 복사
  1. 수업

클래스는 끌어올려지지만 let 및 const와 유사하게 Temporal Dead Zone에 남아 있습니다. 클래스가 선언되기 전에는 클래스에 액세스할 수 없습니다.

const obj = new MyClass(); // ReferenceError: Cannot access 'MyClass' before initialization

class MyClass {
    constructor() {
        this.name = "Class";
    }
}
로그인 후 복사

시간적 데드존(TDZ) 이해

시간적 데드존(Temporal Dead Zone)은 스코프 시작부터 변수가 선언된 지점까지의 기간입니다. 이 기간 동안 let 또는 const 변수에 액세스하면 ReferenceError가 발생합니다.

Key Takeaways

Declaration   Hoisted?       Behavior Before Initialization

var            Yes              undefined

let            Yes            ReferenceError (in TDZ)

const          Yes             ReferenceError (in TDZ)

Function Declaration  Yes       Fully hoisted, works before 
declaration

Function Expression  Partially (as var)   undefined or ReferenceError (if let/const)

Class           Yes              ReferenceError (in TDZ)
로그인 후 복사

결론

깔끔하고 예측 가능한 JavaScript 코드를 작성하려면 호이스팅을 이해하는 것이 중요합니다. 처음에는 마술처럼 보일 수도 있지만 var, let, const, 함수 및 클래스에 대한 규칙을 알면 일반적인 함정을 피하는 데 도움이 됩니다. 명확성을 보장하고 오류 가능성을 줄이기 위해 항상 변수와 함수를 범위의 최상위에 선언하세요.

즐거운 코딩하세요!

위 내용은 JS에서 호이스팅(참조 오류!!)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿