자바스크립트 호이스팅 -2

2018-03-17

Hoisting

변수 ‘선언’ 과 함수’선언’을 끌어올린다.

호이스팅은 선언과 밀접한 관계를 가진다.

자바스크립트 엔진은 코드를 실행하기 전에 모든 선언문들을 위로 끌어올림.

console.log(a()); // a
console.log(b()); // err
console.log(c()); // err

function a() {
    return 'a';
}
var b = function bb() {
    return 'bb';
}
var c = function() {
    return 'c';
}

// 내부 동작

function a(){ // 함수는 선언과 동시에 할당
    return 'a';
}
var b; // 변수는 선언이 먼저 됨
var c;
console.log(a());
console.log(b());
console.log(c());

b = function bb(){
    return 'bb';
}
c = function(){
    return 'c';
}

선언문은 항시 자바스크립트 엔진 구동시 가장 최우선으로 해석하고 할당 구문은 런타임 과정에서 이루어지기 때문에, 호이스팅 되지 않는다.

함수가 자신이 위치한 코드에 상관없이 함수 선언문 형태로 정의한 함수의 유효범위는 전체 코드의 맨 처음부터 시작한다. 함수 선언이 함수 실행 부분보다 뒤에 있더라도 자바스크립트 엔진이 함수 선언을 끌어올리는 것을 의미한다. 함수 호이스팅은 함수를 끌어올리지만 변수의 값은 끌어올리지 않는다.

참고 1) inflearn / jsflow

참고 2)