유효범위

유효범위

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

var vscope = 'global'; //global 이라는 값을 할당 전역변수 
function fscope(){
    var vscope = 'local' ; // 지역변수
    alert(vscope);
}
fscope(); // local이 출력됨 
var vscope = 'global';
function fscope(){
    var vscope = 'local';
    var lv = 'local variables';
    alert(lv); //지역변수 이기때문에 지역에서만 접근이 가능한다. 
}
fscope();
alert(lv); //undefined
var vscope = 'global';
function fscope(){
    var vscope = 'local';
}
fscope();
alert(vscope);  // global

  • 함수내에 var을 쓰게되면 지역변수가 되기때문에 ​ 👉 global 로 출력이됨

  • var 을 사용하지않고 vscope = 'local' 을 쓴다면 전역변수의 값이 변하기 때문에 👉 local이 출력된다.

전역변수

함수 외부에서 선언된 변수, 👉프로그램 전체에서 접근할 수 있는 변수

지역변수

함수 내부에서 선언된 변수로, 함수가 실행되면 만들어지고 함수가 종료되면 소멸하는 변수 👉 함수 외부에서는 접근할 수 없

전역변수의 사용

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()); //30

불가피하게 전역변수를 사용해야 하는 경우는 하나의 객체를 전역변수로 만들고 객체의 속성으로 변수를 관리하는 방법을 사용

전역변수를 사용하고 싶지 않다면 -> 익명함수를 호출

(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';
    // for문 if문 안에서 선언된 변수는 지역변수로서의 의미를 갖지 않는다. 
}
alert(name);

정적 유효범위

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

var i = 5;
 
function a(){
    var i = 10;
    b();
}
 
function b(){
    document.write(i); 
    // 지역변수가 존재하지 않을때 전역변수를 찾게됨 
    // i -> 5 
}
 
a();

🌟 사용될때가 아니고 메소드가 정의될때 전역변수가 사용되게 된다.

Last updated