자바스크립트 호이스팅(hoisting)이란?
Javascript 2011. 12. 21. 16:03
자바스크립트에서는 var 선언문 전에 변수를 사용해도 이미 선언된 것으로 간주한다.
이런 동작 방식을 "호이스팅"(hoisting)이라고 한다.
-
alert(typeof fn1); // undefined
-
alert(typeof value1); // undefined
-
-
var fn1 = function(){ ; };
-
var value1 = 'value1';
-
-
alert(typeof fn1); // function
-
alert(typeof value1); // string
1. 자바스크립트는 실행시 모든 변수가 선언 됩니다. 즉, 결과 에서 처럼 변수를 정의 하기전
결과는 모두 "undefined"를 반환 합니다.
2. 하지만 정의된 후의 결과는 각각 function 과 string을 반환 합니다.
-
alert(typeof fn1); // function
-
-
function fn1(){ ; };
-
-
alert(typeof fn1); // function
1. 하지만 위와 같이 함수 리터널 방식이 아닌 함수 선언문 방식으로 작성한 전역 fn1()
함수 객체는 var선언문 이전의 결과 에서도 function() 을 반환 합니다.
즉, 함수 선언문으로 선언된 변수는 호이스팅 동작에서 정의된 값이 위로 끌어 올려집니다.
아래 코드와 같이 함수 스코프 안에서도 전역과 똑같은 방식으로 호이스팅이 동작합니다.
-
function fn(){
-
-
alert(typeof name); // undefined
-
alert(typeof inner_fn); // function
-
-
var name = 'name';
-
-
function inner_fn(){
-
}
-
-
alert(typeof name); // string
-
alert(typeof inner_fn); // function
-
}
-
-
fn();