Study/JavaScript

유효범위(Scope)

토기발 2022. 8. 25. 21:21

인프런에서 생활코딩 강의를 보며 정리한 포스팅이다.

 

유효범위(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)이라고 한다. 

 

 

 

 

 

출처: https://opentutorials.org/course/743/6495

'Study > JavaScript' 카테고리의 다른 글

자바스크립트의 객체지향 - 상속  (0) 2022.08.28
자바스크립트의 객체지향  (0) 2022.08.26
값으로서의 함수와 콜백  (0) 2022.08.25
jQuery  (0) 2022.08.24
자바스크립트 배열 정리  (0) 2022.08.22