Dragonball Online Goku Hand
본문 바로가기
Javascript

전역변수와 지역변수

by 별의 코비 2022. 7. 28.
728x90

전역변수와 지역 변수

변수는 함수 블록{}을 기준으로 변수의 선언 위치에 따라 '전역 변수'와 '지역 변수'로 나뉘어집니다.

'전역 변수' : 함수 블록{} 밖이나 안에서 자유롭게 사용 가능 '지역 변수' : 함수 블록{} 내에서만 사용 가능

▶ 전역 변수와 지역 변수 선언 위치

전역 변수 지역 변수
var 변수; function 함수 () {
}
function 함수 () {
   var 변수;
}

예시

var kor = 90;
function getScore(){
    kor = 100;
    document.write(kor);
}
getScore();
document.write(kor);
결과 보기

함수 블록{}안에 있는 kor변수는 전역 변수입니다.
∴ getScore()함수를 호출하게 되면 kor 변수 값이 90에서 100으로 바뀌게 됩니다.


예시

var kor = 90;
function getScore(){
    var kor = 100; //지역 변수
    document.write(kor); //100
}
getScore();
document.write(kor); // 90
결과 보기

함수 블록{}안에 있는 kor변수를 var로 정의하였습니다. 함수 블록{}안에서 var로 선언된 변수는 지역 변수가 되며 함수 블록{}밖의 전역 변수 kor과 다른 별도의 변수가 됩니다.
※ 함수 블록{}안에 지역 변수는 반드시 var고 선언해주어야 하며 함수의 지역 변수는 함수 블록{} 밖에서 사용할 수 없습니다.

변수의 scope : 변수의 범위가 달라지는 것

function getScore() {
        var kor = 100;
        console.log(kor);
}
getScore();
console.log(kor); // 에러

※ 전역 변수는 블록{} 내외에서 사용할 수 있기 때문에 동일한 이름으로 덮어 써질 수 있는 문제점이 있음!


▶ 함수 레벨 스코프(function level scope)와 블록 레벨 스코프(block level scope)

var는 함수 블록{}에서만 지역 변수가 존재하며 블록{}이나 제어문 블록{}에서는 지역 변수가 존재하지 않습니다.
ECMAScript 2015(ES6)에서 새로 추가된 letconst는 블록{}이나 제어문 블록{}에서도 지역 변수를 선언할 수 있습니다.

예시

var num = 10;
{
   var num = 20; //num은 전역 변수입니다.
   console.log(num); //20
}
console.log(num); // 20
let num = 10;
{
   let num = 20; //num은 지역 변수입니다.
   console.log(num); //20
}
console.log(num); // 10
const num = 10;
{
   const num = 20; //num은 지역 변수입니다.
   console.log(num); //20
}
console.log(num); // 10

예시

var num = 10;
if (num === 10) {
    var sum = 20; //전역 변수
}
console.log(sum); // 20
var num = 10;
if (num === 10) {
    var sum = 20; //지역 변수
}
console.log(sum); // 에러

var는 제어문 블록{}에서 전역 변수만 존재하기 때문에 sum변수를 블록{}밖에서도 호출할 수 있지만, 제어문 블록{} 안에서 let으로 선언된 변수는 지역 변수이기 때문에 제어문 블록{} 밖에서 호출할 수 없습니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>변수의 범위</title>
    <script>
        //함수의 전역변수
        var sum1 = 10;
        function add1() {
            sum1 = 20;
        }
        add1();
        console.log('전역' + sum1);
        //함수의 지역변수
        var sum2 = 30;
        function add2() {
            var sum2 = 40;
            console.log('지역' + sum2)
        }
        add2();
        console.log('전역' + sum2);
        //블록의 지역변수
        var num1 = 50;
        if (num1 === 50) {
            var num1 =60;
        }
        console.log('전역' + num1);
        let num2 = 70;
        if (num2 === 70) {
            let num2 = 80;
            console.log('지역' + num2);
        }
        console.log('전역' + num2);
    </script>
</head>
<body>
</body>
</html>
결과 보기

·var, let, const 비교 정리

변수 범위 변수 선언 특징
함수 레벨 스코프 var · 변수를 중복해서 선언 가능
· 함수 블록{} 내에서만 지역 변수가 존재
블록 레벨 스코프 let · var와 같지만 같은 블록{}에서는 이미 선언한 변수를 중복해서 선언할 수 없음
· 블록{}, 제어문 블록{}에서도 지역 변수가 존재
const · 같은 블록{}에서는 이미 선언한 변수를 중복해서 선언할 수 없고 저장된 값을 변경할 수도 없음
· 블록{}, 제어문 블록{}에서도 지역 변수가 존재

'Javascript' 카테고리의 다른 글

배열 객체  (7) 2022.08.11
요소 선택  (3) 2022.08.07
함수(function)  (6) 2022.07.26
조건문  (5) 2022.07.26
데이터 타입(Data Type)  (5) 2022.07.26

댓글