생활코딩/자바스크립트
유효범위
선물공룡디보
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)이라고 한다.