선물공룡디보 2021. 8. 17. 20:27

유효범위(Scope)는 변수의 수명을 의미한다.

var vscope = 'global';    //전역변수 (애플리케이션 전역에서 접근이 가능하다.) 
function fscope(){
    var vscope = 'local'; //지역변수 (함수 안에서만 접근할 수 있다.)
    alert(vscope);
}
function fscope2(){
    alert(vscope);
}
fscope();  //local
fscope2(); //global

함수 밖에서 변수를 선언하면 그 변수는 전역 변수가 된다.
전역변수는 사용하지 않는 것이좋다. 여러가지 이유로 그 값이 변경될 수 있기 때문이다.
변수를 선언할 때는 꼭 var 을 붙여야 한다.

 

지역변수의 사용

function a (){
    var i = 0; // 루프를 돌때마다 i 값을 0으로 초기화
}
for(var i = 0; i < 5; i++){ //var은 스코프가 함수단위 이므로 전역변수가 된다.
    a();
    document.write(i);  //0
}//무한루프

해당 예제는 무한루프에 빠지게된다.
전역 변수에의해 의도하지 않은 문제를 발생시켰기 때문이다.

 

전역변수의 사용

MYAPP = {} //하나의 객체를 전역변수로 만든다.
MYAPP.calculator = { //calculator 속성을 만들었다.
    'left' : null,
    'right' : null
}
MYAPP.coordinate = { //coordinate 속성을 만들었다.
    'left' : null,
    'right' : null
}
 
MYAPP.calculator.left = 10;
MYAPP.calculator.right = 20;

function sum(){
    return MYAPP.calculator.left + MYAPP.calculator.right; // 전역변수인 MYAPP의 속성을 더한다.
}
document.write(sum());//30

객체를 사용하여 전역변수를 선언하여 안전하게 사용할 수 있다.
만약 전역변수를 사용하기 싫다면 이 코드를 (function(){ //코드 })(); 모양으로 감싸주면 된다.
이것은 jquery 같은 라이브러리에서 사용하는 방법이다.

유효범위의 대상 (함수)

for(var i = 0; i < 1; i++){ 
    var name = 'coding everybody'; //전역변수로 정의가 된다.
}
alert(name); //'coding everybody'

자바스크립트에서는 변수의 스코프가 함수단위 이다.

 

정적 유효범위

var i = 5;
 
function a(){
    var i = 10;
    b();
}
 
function b(){ 
    document.write(i); //상위 스코프인 전역변수 i 를 바라본다.
}

a();//5

자바스크립트는 함수가 선언된 시점에서의 유효범위를 갖는다. 이러한 유효범위의 방식을 정적 유효범위(static scoping), 혹은 렉시컬(lexical scoping)이라고 한다.