자바스크립트 엔진은 코드를 실행할 때 함수와 변수 선언을 코드 상단으로 끌어올리는 호이스팅 작업을 실행한다.
왜 그럴까?
호이스팅를 통해 개발자는 변수 선언과 변수사용을 자유롭게 활용 가능하다. 즉 항상 상단에 변수 선언과 할당을 하지 않더라도 같은 스코프라면 언제든지 변수를 사용할 수 있게 되는 것이다.
하지만 함수의 경우 선언식인지 표현식인지에 따라 약간의 차이가 발생한다.
예를 들어 선언식의 경우 아래와 같이 작동을 한다.
foo(); // "foo"
function foo() {
console.log('foo');
}
하지만 만약 표현식의 경우 변수 선언만이 호이스팅으로 이루어지기 때문에 아래와 같은 결과를 가지게 된다.
foo(); // Uncaught TypeError: foo is not a function
var foo = function () { }
bar(); // Uncaught ReferenceError: Cannot access 'bar' before initialization
let bar = function () { }
baz(); // Uncaught ReferenceError: Cannot access 'baz' before initialization
const baz = function () { }
'Javascript' 카테고리의 다른 글
[NodeJS] NodeJs는 싱글스레드일까? (0) | 2022.03.14 |
---|---|
[NodeJS] 런타임이란 무엇일까? (0) | 2022.03.14 |
[JS] let, var, const의 차이점 (0) | 2022.03.13 |
[JS] 스크린 맨 아래 이동하기 (0) | 2022.03.05 |
[JS] 이메일 인증 코드 생성하기 (0) | 2022.02.13 |