
자바스크립트를 공부하다보면 꼭 듣게 되는 hoisting이 무엇인 지 알아보자!
함수 선언문과var로 변수를할당할 때 이 선언들을 모두 끌어올려서 함수 유효 범위 최상단에 선언되는 것이다
- 메모리 상에는 영향이 없다
- 클래스는 hoisting되지 않는다 ➡️ 반드시 선언 후에 사용할 수 있다
function foo () {
// 함수 정의부
}
var foo = function () {
// 함수 정의부
}
function foo() {
func1();
function func1() {
console.log('hello world');
}
}
foo(); // 'hello world'
function foo() {
func1(name);
function func1(name) {
console.log('hello ', name);
}
var name = 'john'
}
foo(); // hello undefined
name 변수가 선언된 것만 호이스팅 되지, 할당된 값은 호이스팅되지 않아 undefined 처리가 된 것이다var을 let으로만 바꿈function foo() {
func1(name); // Uncaught ReferenceError: Cannot access 'name' before initialization
function func1(name) {
console.log('hello ', name);
}
let name = 'john' // 바꾼 부분
}
foo();
function foo() {
func1(name); // Uncaught ReferenceError: func1 is not defined
func1 = function (name) {
console.log('hello ', name);
}
var name = 'john'
}
foo();
let 을 사용하도록 하는데, 아직 ES5 이하 버전으로 개발된 코드도 많기 때문에 알아둘 필요는 있다[Javascript] 호이스팅(Hoisting)이란
자바스크립트 완벽 가이드/ 데이비드 플래네건 지음/ 한빛미디어, O'REILLY