호이스팅은 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 위치하도록 하는 것이다.
자바스크립트 함수는 실행되기 전에 함수 안에 필요한 변수값들을 모두 모아서 유효 범위 최상단에 선언한다.
{})이다.즉, 함수 내부의 아래쪽에 존재하는 내용 중 필요한 값들을 끌어올리는 것이다.
var 변수 선언과 함수선언문에서만 호이스팅이 발생한다.
/** --- JS Parser 내부의 호이스팅(Hoisting)의 결과 --- */
// 1. [Hoisting] 변수값 선언
var myName;
var yourName;
// 2. [Hoisting] 함수선언문
function myName() {
console.log("yuddomack");
}
function yourName() {
console.log("everyone");
}
// 3. 변수값 할당
myName = "hi";
yourName = "bye";
console.log(typeof myName); // > "string"
console.log(typeof yourName); // > "string"
var myName = "Heee"; // 값 할당
var yourName; // 값 할당 X
function myName() { // 같은 이름의 함수 선언
console.log("myName Function");
}
function yourName() { // 같은 이름의 함수 선언
console.log("yourName Function");
}
console.log(typeof myName); // > "string"
console.log(typeof yourName); // > "function"
코드의 가독성과 유지보수를 위해 호이스팅이 일어나지 않도록 처음부터 코드를 잘 짜는 것이 좋다.
let, const를 사용해준다.💡 요약
호이스팅이란 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수의 유효범위 최상단에 위치하도록 하는 것이다.
호이스팅은 함수선언식일 경우와 변수 선언자로var를 사용할 때만 발생한다.호이스팅이 발생하면 스코프 꼬임 에러가 발생할 수 있기 때문에, 호이스팅이 발생하지 않도록 처음부터 코드를 잘 작성하는 것이 좋다.
따라서, 함수 상단부에 변수와 함수를 선언하고, 선언자로는let과const를 사용하는 것이 좋다.
함수 표현식의 경우에는 해당 함수를 선언한 변수명만 호이스팅이 되는 것이다. 함수 표현식 내에서 함수 호이스팅이 일어나지 않는다고 잘못 이해하고 있었음.
자바스크립트가 실행되면서 한번 스크립트를 쑥 훑게 된다. 훑어서 어떤 것들을 사용할 것인지 요약해서 위로 올리게 되는 것이다.
설명 너무 좋아요!