변수나 함수를 선언하면 hoisting 이라는 현상이 일어난다.
변수나 함수의 선언 부분을 변수의 범위 맨 위로 강제로 끌고가서 먼저 해석 한다.
function 함수() {
console.log(이름); // undefined
var 이름 = '김';
console.log(이름); // 김
}
위와 같이 함수를 만들었을 때, 눈에 보이지는 않지만 parser가 코드를 해석할 때 아래의 순서로 해석을 한다.
function 함수() {
var 이름;
console.log(이름); // undefined
이름 = '김';
console.log(이름); // 김
}
변수의 선언 부분을 강제로 변수의 범위 맨 위로 끌고 가서 해석한다.
바깥에 있는 변수는 안쪽에서 자유롭게 사용가능 하다.
이것을 참조가능하다 라고 하는데
JS에서는 이 현상을 부르는 다른 말로 closure라고 한다
var 나이 = 20;
function 함수() {
console.log(나이);
}
함수(); // 20
함수(){} 안쪽에서 바깥쪽에 있는 나이 라는 변수를 가져다 쓸 수 있다.
함수(){} 안 쪽에 나이 라는 변수 정의가 있으면 그걸 쓰겠지만
없으면 자연스럽게 바깥에 있는 변수를 참조한다.
모든 함수나 if나 for 내붑에서 공통적으로 사용할 수 있는(참조할 수 있는) 유용한 변수를 뜻한다.
<script>
var 나이 = 20;
function 함수(){
console.log(나이)
}
</script>
var 키워드로 변수를 만들 시 전역객체인 window 에 보관 된다.
var 나이 = 20;
console.log(나이);
console.log(window.나이);