[JavaScript] 유효범위
자바의 Scope
자바는 변수를 사용할 수 있는 스코프가 { } 형태의 코드블록으로 나뉜다.
자바 스크립트의 Scope
{ } 코드블록으로 영역을 나누지 않는다!
==> 자바 스크립트는 특정 구문이 실행 될 때 새로 생성!
- function : 함수, 가장 많이 사용
- with : 곧 사라질 구문 ( ECMAScript6부터 Deprecated )
- catch : 예외처리 구문
지역변수의 유효범위는 함수 안이고, 전역변수의 유효범위는 애플리케이션 전역인데,
같은 이름의 지역변수와 전역변수가 동시에 정의되어 있다면 지역변수가 우선한다.
var vscope = 'global';
function fscope(){
var vscope = 'local';
alert('함수안 '+vscope);
}
fscope();
alert('함수밖 '+vscope);
==> 함수안 local
함수밖 global
var vscope = 'global';
function fscope(){
vscope = 'local';
alert('함수안'+vscope);
}
fscope();
alert('함수밖'+vscope);
==> 둘다 local
why?
- 함수 fscope의 지역변수를 선언할 때 var를 사용하지 않았기 때문이다.
var를 사용하지 않은 지역변수는 전역변수가 된다. 따라서 전역변수의 값을 local로 변경하게 된 것.
전역변수는 사용하지 않는 것이 좋다.
why?
- 여러가지 이유로 그 값이 변경될 수 있기 때문
변수를 선언할 때는 꼭 var을 붙이는 것을 습관화해야함.
유효범위의 필요성
본 예제는 무한반복을 발생시킨다.
function a (){
i = 0;
}
for(i = 0; i < 5; i++){
a();
document.write(i);
}
==> 변경
function a (){
var i = 0;
}
for(var i = 0; i < 5; i++){
a();
document.write(i);
}
전역변수를 사용하는 방법
MYAPP = {}
MYAPP.calculator = {
'left' : null,
'right' : null
}
MYAPP.coordinate = {
'left' : null,
'right' : null
}
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;
function sum(){
return MYAPP.calculator.left + MYAPP.calculator.right;
}
document.write(sum());