til/Front

[JavaScript] 호이스팅(Hoisting)

값진 2022. 6. 13. 14:46

호이스팅(Hoisting)

  - 변수 호이스팅 또는 함수 호이스팅이라고 부름

  - 코드를 실행하기 직전에, 자바 스크립트의 변수 선언문과 함수 선언문은 해당 스코프의 최상단으로 끌어올린다.

     > 코드 재배치

 

 

예시

var globalNum = 10;
function print() {
    document.write("지역 변수 globalNum 선언 전의 globalNum의 값은 " + globalNum + "<br>");
    var globalNum = 20;
    document.write("지역 변수 globalNum 선언 후의 globalNum의 값은 " + globalNum + "<br>");
}
print();

호이스팅 후

var globalNum = 10;
function printNum() {
    var globalNum;
    document.write("지역 변수 globalNum 선언 전의 globalNum의 값은 " + globalNum + "<br>");
    globalNum = 20;
    document.write("지역 변수 globalNum 선언 후의 globalNum의 값은 " + globalNum + "<br>");
}
printNum();

  - 호이스팅 전, 세번째 줄의 코드는 전역변수를 가리키는 것 처럼 보임

  - But 지역변수 globalNum이 선언만 되어있고 초기화는 안된 상태

  - 이때 globalNum에 접근하면 아직 초기회 되지 않은 변수에 접근했으니 undefined 값을 반환

  - 함수 호이스팅에 의해 printNum() 함수 안 var globalNum; 부분이 함수의 최상단으로 이동됨

  - 변수가 실제로 초기화 되는 곳은 호이스팅 전 print() 메소드 안의 var globalNum=20;