호이스팅(Hoisting)

함수 안에 모든 선언들을 끌어올려서 함수 유효 범위 최상단에 선언하는 것

  • 자바스크립트 parser가 함수실행 전에

    변수,함수선언에 대한 정보를 내부적으로 끌어올려서 처리


유효범위

  • var 변수 선언 (let/const는 대상 아님)

  • 함수 선언문 ( 함수 표현식 대상 아님)

// ex1)
console.log("test");
var name = "noca";
let name2 = "aaa";

// js parser 결과
var name;
console.log("test");
name = "naca";
let name2 = "aaa";

//ex2)
foo();
foo2();
function foo() {              // 함수선언문
console.log("test");
}
var foo2 = function() {     // 함수표현식
console.log("test2");
}2


// js parser 결과 !!!
var foo2;
function foo() {
   consoe.log("test");
}
foo();
foo2();         // Uncaught TypeError: foo2 is not a function

foo2 = function() {
   console.log("test2");
}


함수표현식과 함수선언식의 차이(호이스팅) 링크



+ Recent posts