Hoisting 은 "끌어올린다" 라는 의미이다. 즉, Javascript에서 호이스팅은 코드에 선언된 변수(var) 및 함수 선언문이 해당 스코프의 최상단으로 끌어올려지는 것이다. (함수범위 혹은 전역범위)
컴파일러는 자바스크립트 엔진이 인터프리팅(interpreting) 하기 전에 컴파일을 하는데 ,이 때 호이스팅이 발생하는 것이다.
var
변수 선언과 함수 선언문
에서만 호이스팅이 일어난다.
// 이 코드는 console.log(a); var a = 1; console.log(a); // 이처럼 실행된다. var a; // 변수 선언부분만 끌어올려졌다. console.log(a); a = 1; console.log(a); function foo() { // 함수선언문 (호이스팅O) console.log("hello"); } var foo2 = function() { // 함수표현식 (호이스팅X) console.log("hello2"); }
함수선언문
은 구현위치와 관계없이 맨 위로 호이스팅된다.var myName = "Heee"; // 값 할당 var yourName; // 값 할당 X function myName() { // 같은 이름의 함수 선언 console.log("myName Function"); } function yourName() { // 같은 이름의 함수 선언 console.log("yourName Function"); } console.log(typeof myName); // "string" console.log(typeof yourName); // "function" // yourName 변수 선언문에는 값이 할당되어 있지 않기 때문에, 함수 선언문이 변수를 덮어쓰므로 fucntion // myName 변수 선언문에는 값이 할당되었으므로, 변수가 함수선언문을 덮어쓰므로 string(변수의 값)