Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트(JavaScript)는 블록 스코프(Block Scope)를 지원할까?

블록 스코프란 무엇인가?

자바스크립트는 let 또는 const 키워드로 선언된 변수에 대해서만 블록 스코프(block scope)를 지원합니다. 반면 var 키워드로 선언된 변수는 함수 스코프(function scope)만 지원하며, 중괄호 { } 로 묶인 블록 단위의 스코프는 적용되지 않습니다.

쉽게 말해, 블록 안에서 let으로 선언한 변수는 해당 블록을 벗어나면 접근할 수 없지만, var로 선언한 변수는 블록 외부에서도 그대로 접근이 가능합니다. 블록 스코프는 ES6(ECMAScript 2015)에서 let과 const가 도입되면서 본격적으로 지원되기 시작했습니다.

예제 코드

다음은 자바스크립트에서 블록 스코프의 동작을 확인할 수 있는 예제입니다.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .result {
        font-size: 20px;
        font-weight: 500;
        color: blueviolet;
    }
</style>
</head>
<body>
<h1>Block scope JavaScript</h1>
<div class="result"></div>
<br />
<button class="Btn">Click Here</button>
<h3>Click on the above button to create variables with var and let keyword and access them</h3>
<script>
    let resEle = document.querySelector(".result");
    let BtnEle = document.querySelector(".Btn");
    {
        let a = 22;
    }
    {
        var b = 44;
    }
    BtnEle.addEventListener("click", () => {
        try {
            resEle.innerHTML = a;
        } catch (err) {
            resEle.innerHTML = err + "<br>";
        }
        resEle.innerHTML += "var b = " + b;
    });
</script>
</body>
</html>

실행 결과

페이지를 실행하면 아래와 같은 화면이 나타납니다.

자바스크립트(JavaScript)는 블록 스코프(Block Scope)를 지원할까?

'Click Here' 버튼을 클릭하면 다음과 같은 결과가 출력됩니다.

자바스크립트(JavaScript)는 블록 스코프(Block Scope)를 지원할까?

결과 분석

버튼을 클릭하면 두 가지 결과를 확인할 수 있습니다.

첫째, 블록 안에서 let으로 선언한 변수 a에 접근하려고 하면 ReferenceError가 발생합니다. 이는 변수 a가 선언된 블록 { } 내부에서만 유효하기 때문입니다. 즉, 블록 스코프가 정상적으로 동작하고 있는 것입니다.

둘째, var로 선언한 변수 b는 블록 외부에서도 오류 없이 값 44에 접근할 수 있습니다. var는 함수 스코프만 인식하기 때문에 블록을 벗어나도 변수가 유지되는 것입니다.

이처럼 자바스크립트에서 변수 스코프 관련 오류를 방지하려면, 블록 단위로 유효한 letconst 사용을 권장합니다.