hoisting : (동사) 끌어 올려주다.
인터프리터가 자바스크립트 코드를 해석함에 있어서, Global 영역 또는 함수 영역 안에 대해서 주어진 선언들을 모두 끌어올려서 해당 유효 범위 최상단에 선언하는 것을 의미합니다.
선언문이 마치 최상단에 끌어올려진 듯한 현상을 말하며, 이 현상이 발생하는 이유는 선언문이 있는 코드라인을 물리적으로 최상단에 끌어 올렸기 때문이 아니라, 자바스크립트 엔진이 먼저 전체 코드를 스캔하면서 변수 같은 정보를 실행컨텍스트 어딘가에 미리 기록해놓기 때문입니다.
※ 기록되는 곳 : Record 또는 Environment Record (환경 레코드)
자바스크립트 함수는 실행되기 전에 변수 선언/함수 선언은 유효 범위 단위로 호이스팅 된다. 즉, 실제로는 유효범위 단위로 실행컨텍스트 어딘가에 선언된 정보를 미리 기록해 둔다.
※ 유효 범위 : 함수 블록 {} 안에서 유효, 전역함수 안, 즉 hoisting은 Scope 단위로 일어난다.