인프런에서 생활코딩 강의를 보며 정리한 포스팅이다.
유효범위(Scope)는 변수의 수명을 의미한다.
var vscope = 'global';
function fscope(){
alert(vscope);
}
fscope();
결과는 당연히 global이다.
var vscope = 'global';
function fscope(){
var vscope = 'local';
alert(vscope);
}
fscope();
(띄어쓰기가 이상한데 넘어가자 ㅠ)
만약 이렇게 되어 있다면 결과는 어떻게 나올까?
이 경우에는 local로 출력된다.
fscope라는 함수 안에 vscope라는 변수가 선언되었기 때문에 함수 내에 정의된 vscope를 출력하는 것이다.
전역변수 - 함수 바깥에 있는 변수
지역변수 - 함수 안에서만 접근할 수 있는 변수
var vscope = 'global';
function fscope(){
var vscope = 'local';
}
fscope();
alert(vscope);
이 경우 결과는 global이다.
그러나 fscope 함수 내의 변수 선언이 vscope ='local';로 바뀐다면 local로 출력된다.
var를 붙여서 변수를 선언하면 지역변수가 되기 때문이다. 반대로 var를 사용하지 않은 지역변수는 전역변수가 된다.
전역변수는 사용하지 않는 것이 좋다. 여러가지 이유로 그 값이 변경될 수 있기 때문이다.
변수를 선언할 때는 꼭 var을 붙이는 것을 습관화해야 한다. 전역변수를 사용해야 하는 경우라면 그것을 사용하는 이유를 명확히 알고 있을 때 사용하도록 하자.
(function(){
var 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());
}())
전역변수를 전혀 사용하고 싶지 않다면 익명함수를 사용하는 방법이 있다.
for(var i = 0; i < 1; i++){
var name = 'coding everybody';
}
alert(name);
자바스크립트는 함수에 대한 유효범위만을 제공한다.
만약 자바였고, alert가 System.out.println이었다면 에러가 뜬다.
name이 for문 안에 있는 지역변수이기 때문이다.
var i = 5;
function a(){
var i = 10;
b();
}
function b(){
document.write(i);
}
a();
결과는 5이다.
자바스크립트는 함수가 선언된 시점에서의 유효범위를 갖는다. 이러한 유효범위의 방식을 정적 유효범위(static scoping), 혹은 렉시컬(lexical scoping)이라고 한다.
'Study > JavaScript' 카테고리의 다른 글
자바스크립트의 객체지향 - 상속 (0) | 2022.08.28 |
---|---|
자바스크립트의 객체지향 (0) | 2022.08.26 |
값으로서의 함수와 콜백 (0) | 2022.08.25 |
jQuery (0) | 2022.08.24 |
자바스크립트 배열 정리 (0) | 2022.08.22 |