자바스크립트 유효범위: 전역변수와 지역변수
유효범위(Scope)는 변수의 수명을 의미합니다.
var vscope = 'global';
function fscope(){
alert(vscope); //global을 출력
}
fscope();
fscope함수는 함수 바깥에 선언된 vscope에 접근할 수 있습니다.
var vscope = 'global'; var vscope = 'global';
function fscope(){ function fscope(){
var vscope = 'local'; vscope = 'local';
alert('함수안 '+vscope); //local을 출력 alert('함수안 '+vscope); //local을 출력
} }
fscope(); fscope();
alert('함수밖 '+vscope); //global을 출력 alert('함수밖 '+vscope); //local을 출력
var vscope = 'global';
function fscope(){
var vscope = 'local' //지역변수에 해당
vscope = ‘local’ //역시 지역변수에 해당
}
fscope();
alert(vscope); //global을 출력
이미 var으로 vscope의 지역변수가 생성되었습니다.
전역변수는 사용하지 않는 것이 좋습니다. 여러가지 이유로 그 값이 변경될 수 있기 때문입니다.함수 안에서 전역변수를 사용하고 있는데, 누군가에 의해서 전역변수의 값이 달라졌다면 어떻게 될까요? 함수의 동작도 달라지게 됩니다. 이는 버그의 원인이 됩니다. 또한 함수를 다른 애플리케이션에 이식하는데도 어려움을 초래합니다. 변수를 선언할 때는 꼭 var을 붙이는 것을 습관화해야 합니다. 전역변수를 사용해야 하는 경우라면 그것을 사용하는 이유를 명확히 알고 사용해야합니다.
전역변수를 사용하는 법
MYAPP = {} (function(){
MYAPP.calculator = { var MYAPP = {}
'left' : null, MYAPP.calculator = {
'right' : null 'left' : null,
} 'right' : null
MYAPP.coordinate = { }
'left' : null, MYAPP.coordinate = {
'right' : null 'left' : null,
} 'right' : null
MYAPP.calculator.left = 10; }
MYAPP.calculator.right = 20; MYAPP.calculator.left = 10;
function sum(){ MYAPP.calculator.right = 20;
return MYAPP.calculator.left + MYAPP.calculator.right;
function sum(){
} return MYAPP.calculator.left + MYAPP.calculator.right;
document.write(sum()); }
document.write(sum());
}())
오른쪽 코드처럼 함수로 감싸주어 바로 호출할 수 있습니다. = 익명함수
Var MYAPP은 function()내에 있기 때문에 지역변수입니다.
이러한 코드는 자바스크립트에서 로직을 모듈화하는 일반적인 방법입니다.
자바스크립트 유효범위의 대상(함수)
for(var i = 0; i < 1; i++){ for(int i = 0; i < 10; i++){
var name = 'coding everybody'; String name = "egoing"; //name은 지역변수
} }
alert(name); System.out.println(name); //에러가 납니다.
*함수의 중괄호 안에 선언된 변수만이 함수 안의 지역변수이므로 for, if 중괄호에 선언된 함수는 지역변수로의 의미를 가지 않습니다.
자바스크립트 정적 유효 범위
var i = 5; //전역 변수
function a(){
var i = 10; //지역 변수
b();
}
function b(){
document.write(i); //b함수 내에 i라는 변수가 존재하지 않기 때문에 전역 변수를 찾게 된다.
} //사용될 때가 아니라 정의될 때의 전역 변수가 사용됩니다. 이를 정적
//유효범위 또는 렉시컬이라고 부릅니다.
a(); //실행 결과는 5
출처 : 생활코딩 강의
'프로그래밍 > JavaScript' 카테고리의 다른 글
자바스크립트 JavaScript 간단한 범위에 관한 문제 (0) | 2017.11.16 |
---|---|
자바스크립트 : 값으로서의 함수와 콜백, 클로저(Closure) (0) | 2017.11.12 |
자바스크립트 언어 소개!! (0) | 2017.11.10 |
jsp pageEncoding, charset 변경하는 방법!! (0) | 2017.10.24 |
JSP와 JavaScript의 차이점 알기 (1) | 2017.07.23 |