자바스크립트 ) 호이스팅

Jeong-Taek·2022년 10월 22일

호이스팅이란

호이스팅은 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 위치하도록 하는 것.

자바스크립트 함수는 실행되기 전에 함수 안에 필요한 변수값들을 모두 모아서 유효범위 최상단에 선언한다.

  • 자바스크립트의 파서(parser)가 함수 실행 전 해당 함수를 한 번 훑는다.
  • 함수 안에 존재하는 변수/힘수 선언에 대한 정보를 기억하고 있다가 실행시킨다.
  • 유효 범위는 함수 블록({})이다.

즉, 함수 내부의 아래쪽에 존재하는 내용 중 필요한 값들을 끌어올리는 것.

  • 실제로 코드가 끌어올려지는 건 아니며, 자바스크립트 parser 내부적으로 끌어올려서 처리하는 것이다.
  • 그렇기 때문에 실제 메모리에서는 변화가 없다.

호이스팅의 대상

var변수 선언과 함수선언문에서만 호이스팅이 발생한다.

  • var변수/함수 언먼만 위로 끌어올려지며, 할당은 끌어 올려지지 않음.

호이스팅 우선순위

  • 변수와 함수 선언 이름이 같을 경우 변수 선언이 함수 선언보다 위로 끌어올려진다.
  • 값이 할당되어 있지 않은 변수와 값이 할당되어 있는 함수가 같은 이름으로 선언되었을 경우, 함수 선언문이 변수를 덮어쓴다.

호이스팅 사용시 주의할 점

코드의 가독성과 유지보수를 위해 호이스팅이 일어나지 않도록 처음부터 코드를 잘 짜는 것이 좋다.

  • 함수와 변수를 코드 상단부에 선언하면, 호이스팅으로 인한 스코프 꼬임 현상 방지 가능
  • let과 const를 사용하자.

결론

  • 호이스팅이란 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수의 유효범위 최상단에 위치하도록 하는 것
    호이스팅은 함수선언식일 경우와 변수 선언자로 var를 사용할 때만 발생하다.

  • 호이스팅이 발생하면 스코프 꼬임 에러가 발생할 수 있기 때문에, 호이스팅이 발생하지 않도록 처음부터 코드를 잘 짜는 것이 좋음.
    따라서, 함수 상단부에 변수와 함수를 선언하고, 선언자료는 let과 const를 사용하는 것이 좋다.

0개의 댓글