scope
JS에도 힙, 스택, 코드 영역이 존재합니다.
고로 역시 지역변수와 전역변수 개념이 존재하며
지역변수와 전역변수의 개념과 기능 또한 다른 언어와
대체로 유사하게 적용됩니다.
function theFnc() {
var num;
num = 30;
}
theFnc();
console.log(num);
theFnc()함수 안에서 var num 을 선언했습니다.
그리고 그 theFnc()지역 밖에서 num을 호출해보았지만
콘솔엔 아무것도 찍히지 않았습니다.
또한 JS 는 따로 메인메서드가 존재하지 않습니다.
script 태그를 위에서 아래로 순차적으로
실행하기 때문에 중괄호 내부에 속하지 않으면서
script 태그 내부에 존재하는 변수가 있을 수 있습니다.
script 영역이 모든 영역의 상위 영역이므로
이러한 script 영역에 직접 속한 변수를 전부
전역변수로 간주합니다.
중괄호 내부에 있지만 않으면
전역변수가 되는 겁니다.
<script>
var num;
function theFnc() {
num = 30;
}
theFnc();
console.log(num);
</script>
var num을 전역변수로 선언한 후
theFnc()함수를 호출해서 30이란 수를 저장했습니다.
함수는 구역이 종료되며 script 구역에서 삭제되었지만
num에 저장된 30은 그대로 출력되는 것을 확인 할 수 있습니다.
duplicate var
이렇듯 전역변수와 지역변수는
같은 변수명으로 존재할 수 있으나
호출은 별개로 진행됩니다.
변수명을 전역, 지역별로 중복해서 쓰는 것은
권장하지 않으나 혹시 불가피하게 사용할 수도 있기 때문에.
이러한 개념을 잘 이해해두셔야 하겠습니다.
같은 이름의 변수를 전역과 지역에 선언하여
호출할 때 어떤 변수가 출력되는지
코드를 통해 확인해봅시다.
<script>
var i = 10; // 전역변수 i
var num = 20; // 전역변수 num
function theTest(){
var num = i + 200; // theTest 지역변수 num
alert(num); // 자기 지역 우선 호출 ==> 210이 출력
}
theTest(); // 지역이 생성되었다가 소멸함
// 호출해야지 지역이 생성되는 겁니다.
function theFnc() {
document.write(num); // 전역 변수 호출 ==> 20이 출력
}
theFnc(); // 지역 생성되었다가 소멸
</script>
지역 내에서 호출을 하면 자신의 지역 내에 선언되어 있는
num 변수가 우선 호출되는 것을 확인할 수 있었습니다.
여러분이 교실에서 친구 민수를 부른다고
전국에 있는 민수가 호출되지 않고
옆 교실이나 옆나라에 있는 민수가 호출되지 않듯이
지역 내에서는 지역내의 변수가 우선권을 가지고 있습니다.
이러한 속성을 잘 체득해둡시다.
일단은 여기까지 입니다.