본문 바로가기
Javascript

전역변수와 지역변수

by 코딩 척척학사 2022. 7. 28.
728x90

전역변수/지역변수

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


'전역변수'와 '지역변수'

'전역변수'는 함수 블록{} 밖이나 안에서 자유롭게 사용이 가능하지만, '지역변수'는 함수 블록{} 내에서만 사용할 수 있습니다.

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

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

[ 예시 ]

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

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

함수 블록{} 안에서의 지역변수는 반드시 var(먼저 선언한 함수와 같은 형식)을 붙여 선언하여야 합니다. 그러면 블록 밖의 전역변수와는 다른 별도의 변수가 됩니다. 블록 안의 지역변수는 블록 밖에서 사용할 수 없습니다.

function getScore() {
    var kor = 100;     console.log(kor);    //100
}
getScore();
console.log(kor);    //에러.
//kor은 함수 블록 내에서만 작동하는 지역변수이기 때문에 함수 블록 밖에서 호출해도 값을 불러올 수 없다.


'함수 레벨 스코프'와 '블록 레벨 스코프'

변수의 스코프(scope)란 블록{}에 의해 변수의 범위가 달라지는 것을 뜻합니다.

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

var

var은 함수 블록{}에서만 지역변수가 존재하며, 블록{}이나 제어문 블록{}에서는 지역변수가 존재하지 않습니다.

var num = 10;
{
    var num = 20;    //var은 블록{}에서는 지역변수가 존재하지 않기 때문에, num은 전역 변수입니다.
    console.log(num);    //20
}
console.log(num);    //20

let, const

ES6에서 새로 추가된 let과 const는 함수 블록{}, 블록{}, 제어문 블록{}에서 모두 지역변수를 선언할 수 있습니다.

let num = 10;
{
    let num = 20;    //let은 블록{}에서도 지역변수가 존재하기 때문에, num은 지역 변수입니다.
    console.log(num);    //20
}
console.log(num);    //10

const num = 10;
{
    const num = 20;    //const는 블록{}에서도 지역변수가 존재하기 때문에, num은 지역 변수입니다.
    console.log(num);    //20
}
console.log(num);    //10

제어문 블록에서의 변수

var sum = 10;
if (sum === 10) {
    var sum = 20;    //var은 제어문 블록{}에서 전역변수만 존재하기 때문에, sum은 전역변수입니다.
}
console.log(sum);    //20

let sum = 10;
if (sum === 10) {
    let sum = 20;    //let은 제어문 블록{}에도 지역변수가 존재하기 때문에, sum은 지역변수입니다.
}
console.log(sum);    //10

let과 const는 블록{} 제어문 블록{}에서 지역변수를 선언할 수 있기 때문에, 블록 안에서 선언된 지역변수를 블록 바깥에서 호출할 수 없습니다.

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

[ 예제 ]

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

'Javascript' 카테고리의 다른 글

배열 메서드 : join() / push() / pop()  (9) 2022.08.11
요소 선택자 알아보기  (10) 2022.08.05
함수 알아보기  (13) 2022.07.26
자료형 알아보기  (15) 2022.07.25
조건문 이해하기  (12) 2022.07.25

댓글


HTML이 적힌 썸네일 이미지
CSS가 적힌 썸네일 이미지
JAVASCRIPT가 적힌 썸네일 이미지

JAVASCRIPT

자세히 보기