자바스크립트 - 호이스팅
자바스크립트에서 호이스팅이란?
호이스트라는 용어는 "(무언가) 올리기"를 의미하며 JS에서는 선언 전에 클래스, 함수 및 변수를 사용해도 오류가 발생하지 않는 JS 인터프리터의 동작을 설명하는 데 사용됩니다:
Uncaught ReferenceError: X is not defined
. 이는 호이스팅이 선언을 맨 위로 이동한 것처럼 보이기 때문입니다. (변수와 함수는 실제로 실행 컨텍스트의 생성 단계 중에 메모리에 저장됩니다. 이에 대한 자세한 내용을 읽을 수 있습니다here.)아래에서는 변수 호이스팅과 함수 호이스팅의 차이점에 대해 설명하겠습니다.
가변 호이스팅
변수를 선언할 때
var
, let
및 const
를 사용할 수 있습니다. let
와 const
모두 게양되지만 기본값으로 초기화되지 않습니다. 이는 선언 전에 변수를 사용하면 여전히 ReferenceError
를 얻을 수 있음을 의미합니다. 그러나 var
의 경우 호이스팅되면 기본 값인 undefined
로 초기화되므로 오류가 발생하지 않습니다.예시:
console.log(varThing); // undefined
var varThing = "testingVar";
console.log(letThing);
let letThing = "testingLet"; // Uncaught ReferenceError: Cannot access 'letThing' before initialization
함수 호이스팅
함수가 호이스팅되면 오류 없이 함수를 안전하게 호출/사용할 수 있음을 의미하며, 이는 함수 표현식이 아닌
function
키워드로 생성된 함수에만 적용됩니다.예시:
console.log(getRandomNumber(2, 5)); // 2
function getRandomNumber(min, max) {
return Math.floor(Math.random() * (max - min) + min);
}
console.log(getRandom()); // Uncaught TypeError: getRandom is not a function
var getRandom = function () {
return Math.floor(Math.random() * 10)
}
예제에서
getRandomNumber
함수가 선언 전에 호출될 수 있음을 알 수 있습니다. 이는 호이스팅 때문입니다. 그러나 getRandom
를 사용하면 특히 값이 undefined
인 변수로 호이스팅되었으므로 함수로 사용하려고 하면 TypeError
가 표시됩니다.요약
호이스팅은 실행 컨텍스트 동안 클래스, 함수 및 변수 선언이 메모리에 저장되는 프로세스를 설명하는 데 사용되는 용어입니다. 이렇게 하면 프로그램이 이러한 값을 선언하기 전에 읽을(사용할) 수 있습니다. 문제를 일으킬 수 있으므로 어떤 종류의 오류가 발생할 수 있는지 뿐만 아니라 특정 항목이 작동하는 이유를 선언하기 전에 미리 아는 것이 좋습니다.
초기화 오류를 피하기 위해 클래스, 표현식 함수 및 변수를 사용하기 전에 항상 선언하는 것이 가장 좋습니다.
읽어주셔서 감사합니다. 도움이 되셨거나 의견이 있으시면 댓글을 남겨주세요. 😀
Reference
이 문제에 관하여(자바스크립트 - 호이스팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/justtanwa/javascript-hoisting-24if텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)