JavaScript - 호이스팅

크리스·2022년 12월 17일
0
post-thumbnail

호이스팅

호이스팅이란 코드가 실행되기전 코드안에 있는 모든 변수들과 함수들을 가장 최상단으로 끌어올려 선언되는것을 말한다.

  • 변수와 함수는 스크립트 최상단에 선언이되고 함수 안에 있는 변수들과 함수들은 {} 블록 내 최상단에 선언이된다.
  • 실제로 끌어올리는것은 아니며 코드가 실행될때 내부적으로 끌어올려서 처리하는 것이다.

호이스팅 대상

  • var 변수와 함수선언식만 해당된다. var 변수는 변수 선언과 초기화까지 진행된다. 할당은 호이스팅 되지 않는다. 변수 할당 코드 위에서 변수를 호출하게 되면 undefined가 출력된다.
  • 함수표현식에서는 변수만 호이스팅 되어 초기화된다. 함수는 호이스팅 되지 않는다.

호이스팅 우선순위

여기서 사실 많이 헷갈리기 시작했다. 우선순위는 변수할당,함수선언,변수선언이다. 사실 여기서 헷갈린 부분은

console.log(hello);
var hello = 'hello 변수 호출 입니다.';
function hello(){
  return "hello 함수 호출입니다.";
}
console.log(hello);

위의 결과였다.
아래의 console.log의 hello 호출은 당연히 변수할당이 함수선언보다 우선 순위에 있으니 변수가 함수선언문을 덮어쓰는것을 예상할수 있었다. 근데 변수할당과 함수선언 전에 hello를 호출하면 누가 호출 될지 궁금해 호출해 봤는데 함수가 호출되는것이었다. 공부했던 것과 다른 결과를 얻었고 이곳저곳 찾아보니 내 결론은 이렇게 나오게 되었다.

// var hello;
// function hello(){
//  return "hello 함수 호출입니다.";
//}
console.log(hello);
hello = 'hello 변수 호출 입니다.';

위의 코드는 처음 코드가 실행이되면 호이스팅 되는것을 작성해봤다. 그래서 내 결론은 호이스팅 되면서 변수할당전에 hello를 호출하니까 호출 위에서는 호이스팅으로 변수의 선언만 되었기 때문에 함수선언이 더 우선순위에 있어 함수가 호출된것이라는 결론이 내려졌다.
앞서 자바를 공부하고 자바스크립트를 공부하니 자유도가 많은 언어이면서 자바와는 다른 특징을 가지는것이 생각보다 많아 혼란이 좀 생기는것 같다.

profile
재밌는건 다 합니다.

0개의 댓글