선언이 코드 실행 보다 먼저 메모리에 저장되는 과정
으로 인한 현상
코드 실행 전 변수선언/함수선언이 해당 스코프의 최상단
으로 끌어 올려진 것 같은 현상
코드 실행 전 이미 변수선언/함수선언이 저장되어 있기 때문에 선언문보다 참조/호출이 먼저 나와도 오류 없이 동작한다.
함수
는 전체 함수에 대한 참조와 함께 저장되기 때문에 함수를 만든 라인 이전에도 호출 가능var
키워드로 선언된 변수와 달리 let,const
키워드로 선언된 변수를 선언문 이전에 참조하면 참조 에러(ReferenceError)가 발생!!console.log(sum(1,2)) //3
console.log(c) // undefined
console.log(b) // ReferenceError: b is not defined
console.log(a) // ReferenceError: a is not defined
function sum(x,y) {
return x + y;
}
const a
let b
var c
위의 현상은 var
키워드로 선언된 변수는 선언과 함께 undefined
로 초기화되어 메모리에 저장되지만
let,const
키워드로 선언된 변수는 초기화되지않은 상태
로 선언만 메모리에 저장되기 때문..🙄