Hoisting

1. 함수 선언문과 함수 표현식

  • 함수 선언문 (function declaration)
function a() {
  • 함수 표현식 (function expression)
    • function을 변수에 할당
var a = function() {
}
var b = function success() { //리터럴

}

2. Hoisting

  • 변수의 선언을 끌어 올리는 것입니다.

    var x = 1;
    console.log(x + " " + y); // '1 undefined'
    var y = 2;
    • 밑에서 선언한 변수가 위에서 y에 undefined를 넣어줘 버렸습니다.
    • 위로 끌어 올렸기 때문에 Hoisting입니다.
    • 위 코드는 이렇게 동작합니다.
    var x = 1;
    var y;
    console.log(x + " " + y);
    y = 2;

3. 함수의 Hoisting

  • 함수 선언식

    catName("Chloe");
    
    function catName(name) {
      console.log("My cat's name is " + name);
    }
    /*
    위 코드의 결과는: "My cat's name is Chloe"
    */
  • 함수 표현식

    console.log(notHoisted) // undefined
    notHoisted(); // TypeError: notHoisted is not a function
    
    var notHoisted = function() {
       console.log('bar');
    };

3. let, const의 Hoisting

  • let, const는 hosting이 됩니다.

    console.log(x); // Uncautght ReferenceError: x is not defined
    let x = 1;

3.1. Temporal Dead Zone(TDZ)

  • LexicalEnvironment에 변수 정보를 미리 수집합니다. (hosting)

  • let, const는 실행되기 전까지 엑세스 할 수 없고, 이 단계를(공간)를 TDZ라고 합니다.

    x = 3; // Uncautght ReferenceError: Cannot access 'x' before initialization
    let x = 1;
  • 아직 초기화 하지 않아서 값을 넣을 수 없다는 에러가 납니다.

  • 즉, x가 있다는 것은 알고 있지만 위에 선언하라는 오류이기 때문에 hoisting이 되고 있다는 것이죠.

  • 하지만 TDZ가 사용하지 못하게 컨트롤합니다.

Last modified: 2022년 02월 22일

Comments

Write a Reply or Comment

Your email address will not be published.