본문 바로가기
JavaScript

지역/전역 변수

by 코린이 박원장👶 2022. 7. 28.

지역변수/전역변수

변수는 함수 블록{}을 기준으로 변수의 선언 위치에 따라 '전역/지역 변수'로 나뉩니다.
전역 변수는 함수 블록{} 밖이나 안에서 자유롭게 사용 가능하지만
지역 변수는 함수 블록{} 내에서만 사용 가능합니다.


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

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

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

var kor = 90;
function getScore() {
    kor = 100; // 전역 변수
    console.log(kor); // 100
}
getScore();
console.log(kor); //100

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

var kor = 90;
function getScore() {
    var kor = 100; // 지역 변수
    console.log(kor); // 100
}
getScore();
console.log(kor); //90


함수 레벨 스코프/ 블록 레벨 스코프

스코프(scope)는 블록{}에 의해 변수의 범위가 달라지는 것을 말합니다.
var는 함수 블록{}에서만 지역 변수가 존재하며 블록{}이나 제어문 블록{}에서는 지역 변수가 존재하지 않습니다.
let, const는 블록{}이나 제어문 블록{}에서도 지역 변수를 선언할 수 있습니다.

[예시1]
블록{}안에서 let과 const로 선언된 변수는 블록{}의 지역 변수로 인식합니다.

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

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

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

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

[예시3]

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>변수의 범위</title>
    <script>
        {
            // 함수의 전역변수
            var suml = 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 === 0) {
                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>
결과보기
전역20
지역40
전역30
전역60
지역80
전역70

var, let, const 비교

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

'JavaScript' 카테고리의 다른 글

배열 메서드(join/push/pop)  (11) 2022.08.11
요소 선택  (8) 2022.08.05
함수  (12) 2022.07.26
데이터 타입  (9) 2022.07.25
조건문  (10) 2022.07.25

댓글


HTML이미지
HTML이미지

JAVASCRIPT

자세히 보기
HTML이미지