호이스팅이란

  • 인터프리터가 자바스크립트 코드를 해석하면서 Global 영역에 선언된 코드블록을 최상의 Scope로 끌어 올리는 것

  • 선언된 변수,함수를 가장먼저 해석하고, 할당구문은 런타임시 이루어지기 때문에 호이스팅안됨

  • 쉽게 말하면 선언문은 항상 최우선으로 해석



함수표현식과 함수선언식의 차이는 호이스팅에 있다

함수선언식(function Expressions) : 호이스팅 됨 , {} 안의 내용은 포함

함수표현식(function Declarations) : 호이스팅 안됨, = 연산자는 포함하지 않음

ex1();      // 함수선언식!
ex2(); // 에러 (함수 못찾음)

// 함수선언식
function ex2() {
console.log("함수선언식!");
}

// 함수표현식
var ex1 = function() {
console.log("함수표현식!");
}




함수 호이스팅은 함수를 사용하기 전에 반드시 함수를 선언해야한다는 규칙을 무시하고

코드를 사람이 해석하는데 많은 혼란을 주게 된다.

이런 이유로 코딩할 때 선언문은 최상위에 작성 하고, 함수표현식을 권고하고 있다.



구글 자바스크립트 가이드


// bad
function foo() {
 // ...
}

// bad
const foo = function () {
 // ...
};

// good
// lexical name distinguished from the variable-referenced invocation(s)
const short = function longUniqueMoreDescriptiveLexicalFoo() {
 // ...
};

`




+ Recent posts