[JavaScript] 전역변수와 지역변수

*함수안의 변수를 지역변수라고하며 함수밖의 변수를 전역변수라고한다.

1번 var로 지역변수 전역변수를 지정한경우(함수밖에서 호출한경우)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
var vscope = 'global';
function fscope(){
    var vscope = 'local';
}
fscope();
alert(vscope);
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
-> 전역변수 global을 값으로 가져온다.


2번 var로 지역변수 전역변수를 지정한경우(함수안에서 호출한경우)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
var vscope = 'global';
function fscope(){
    var vscope = 'local';
    alert(vscope);
}
fscope();

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
-> 지역변수 local을 값으로 가져온다.

1차적으로 호출한값을 지역변수를 찾고 없을경우 전역변수에서 가져온다.
만약에 지역변수로 var vscope = 'local';이 없었다면 전역변수 global을 값을 경고창에 띄운다.


지역변수를 var을 빼고 지정하면 전역변수로 취급한경우
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
var vscope = 'global';
function fscope(){
     vscope = 'local';
    alert(vscope);
}
fscope();
alert(vscope);
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
-> 지역변수 local을 값으로 가져온다.

함수안에서 var를 사용하지않고 변수를 지정해줄경우 지역변수로 취급되지않고 전역변수에 선언된 var vscope = 'global'값을 local로 바꾸어 local경고창을 두번 띄우게된다.



+추가적으로 
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
var vscope = 'global';
function fscope(){
    var vscope = 'local';
    vscope = 'local';
}
fscope();
alert(vscope);
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
-> 전역변수 global을 값으로 가져온다.

이렇게 실행할경우 함수밖의 alert(vscope)은 전역변수를통해 global을 값으로 경고창을 띄운다.
그 이유는 함수안에 var가 없는 vscope = 'local';이 선언되어있더라도 이전에 var vscope='local';이 지역변수로 선언되어 있기때문이다.var가없이 선언되어있더라도 함수안있는 동일한 변수명을 가진 지역변수를 일단 찾아보고 일치하는 변수명이 지정되어있는경우 지역변수값을 새로 지정한 값으로 변경하고 동일한 변수가 지정되어있지 않을경우에만 전역변수의 값을 바꾸게되는데 위의경우는 지역변수내에 동일한 명칭의 변수명이 지정되어있어서 그대로 local을 값으로 가져온다. 이러한 경우 var가 안붙었어도 전역변수를 가져오지 않는다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
function a () {
    i = 0;
}
for(var i = 0; i < 5; i++){
    a();
    console.log(i);
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

위와같은 코드를 실행할경우 웹페이지가 다운되게되는데 그 이유는 함수안에 i는 전역변수를 가리키고있고 for문 안에 작성된 var i = 0;의 값또한 전역변수를 가리키고있으므로 숫자5전까지 출력해야하지만 계속해서 전역변수 i의 값이 0으로 초기화되어 무한으로 반복하게되므로 웹페이지가 멈추게된다.

a함수안에 전역변수인 i = 0 대신에 지역변수인 var i = 0;를 작성할 경우 콘솔창에 1,2,3,4가 차례로 출력된다.



*주의: 함수의 중괄호{ } 안에서 선언된 변수만이 그 함수안에서의 지역변수가 되는것이고 if문, for문의 중괄호 안에서 선언된 변수는 지역변수가아닌 전역변수로서 의미를 갖게된다.

함수안에서 var와 함께 사용한 변수는 지역변수로서 작용하지만  if문, for문 과같은 함수안에서의 var와 같이 작성된 변수는 지역변수가아닌 전역변수로서 의미를 갖게된다.

댓글