Web/javascript

javascript - 호이스팅(hoisting)

rockettttman 2021. 1. 26. 14:27

호이스팅 - 함수 내의 모든 선언들을 해당 함수 최상단으로 끌어올려 선언하는 것

  • {}블럭 안에서 유효
  • 자바스크립트 parser가 함수 실행 전 한번 훑어 선언부를 모두 최상단으로 끌어올림
  • 메모리 상의 변화는 없다.
  • 최대한 호이스팅이 일어나지 않도록 함수 선언을 let, const 와 같이 선언한다.

 

 

함수 선언문함수 표현식 에서의 Hoisting

 

함수 선언문

function print() {
    var result = inner();
    console.log('javascript - ' + result);
    
    function inner() {
        return 'hoisting'
    }
}

print();

// 'javascript - hoisting 정상 출력

 

함수 표현식

function print() {
    var result = inner();
    console.log('javascript - ' + result);
    
    var inner = function() {
        return 'hoisting'
    }
}

//ERROR
Uncaught TypeError: inner is not a function
    at print (<anonymous>:2:18)
    at <anonymous>:1:1

 

동일한 이름의 변수, 함수 간의 Hoisting

 

  • 변수 선언이 함수 선언보다 우선시 된다.
 var myName = "Heee"; // 값 할당 
  var yourName; // 값 할당 X

  function myName() { // 같은 이름의 함수 선언
      console.log("myName Function");
  }
  function yourName() { // 같은 이름의 함수 선언
      console.log("yourName Function");
  }

  console.log(typeof myName); // > "string"
  console.log(typeof yourName); // > "function"

 

 

출처 : gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html