Language/javascript

[JavaScript] 호이스팅 hoisting

다닿 2023. 10. 16. 17:12

다른 게시글에도 정리했지만 한번 더...


Scope

변수에 영향력을 행사하는 범위이다. 지역변수, 전역변수를 예로 들수 있다.

전역 스코프(Global Scope)는 전역에 선언되어있어 어느 곳에서든지 해당 변수에 접근할 수 있다.

지역 스코프(Local Scope)는 해당 지역에서만 접근할 수 있다.


Hoisting

호이스팅이란 모든 선언문이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성을 말한다.

문단 아랫단에 변수를 선언을 하여도 문단 가장위에 선언된것으로 간주, 선언했던 구간에서는 값을 할당한 것으로 읽는다.


호이스팅의 예시

console.log(a);
var a = 2;
console.log(a);

선언하지 않은 것을 호출하면 에러가 나면서 프로그램이 동작하지 못하는데, 첫 console.log(a)가 호출 할 때 a를 선언하지 않았는데 프로그램이 동작을 한다.

 

호이스팅이 이뤄졌기 때문인데 프로그램은 아래와 같은 순서로 프로그램을 읽었기 때문이다.

var a; // 호이스팅에 의해 스코프 맨 윗단으로 선언문이 옮겨짐
console.log(a);
a = 2; // 원래 선언문 위치는 할당의 역할을 함
console.log(a);

 

함수선언 방식에 따른 호이스팅

 

함수 선언문 // 함수로 선언

function func1() {

}

함수 표현식 // func2라는 변수에 함수를 할당

var func2 = function() {
    
}

 

호이스팅이 된 경우

function func1() { // 함수선언문은 안의 내용 전체를 호이스팅

}
var func2; // 함수표현식은 변수 선언만 호이스팅

// function func1() {
//
// }

var func2 = function() {

}