Javascript
[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());
댓글 1