프론트엔드/JavaScript

[JS] 전역 스코프 / 함수 스코프 / 블록 스코프 의 차이

병걸 2023. 11. 21. 14:48

 

JS에는 Scope(스코프) 라는 단어가 있습니다. 이게 무엇인지 알아보도록 하자.

 

Scope란? 

 

  • 변수에 접근할 수 있는 범위 입니다.
  • JS에는 2가지의 스코프 타입이 있습니다. ( 전역 스코프 / 지역(함수) 스코프 )

지역(함수) 스코프란?

 

  • 함수가 선언되면 하나의 스코프가 발생하는데 이걸 함수스코프라고 합니다.
  • 함수에서 선언한 변수는 해당 함수 내에서만 접근 가능합니다.
function abc() {
  var aa = '12';  // 함수 내부에서 선언
}
console.log(aa);  // Uncaught ReferenceError: aa is not defined

위 이미지 처럼 함수 외부에서 aa를 호출하게 되면 변수는 지역 스코프 이므로 함수 내에서만 사용이 가능하여 

undefine 이 뜹니다.


전역 스코프란?

 

  • 프로그램 전체에서 접근할 수 있는 가장 넓은 범위를 나타냅니다.
  • 선언된 변수는 프로그램 어디에서나 접근할 수 있습니다.
var globalVariable = 10; // 전역 스코프

function exampleFunction() {
    console.log(globalVariable); // 전역 스코프의 변수에 접근 가능
}

만약 변수가 함수 내부에 선언된 것이 아나리면 이 변수는 전역 스코프이므로 어디에서든 접근이 가능합니다.


블록 스코프란?

 

  • 중괄호('{ }') 로 둘러싸인 코드 블록 내에서 변수가 유효한 범위를 나타냅니다.
  • 변수 'let' / 'const' 키워드를 사용하여 선언할 수 있습니다.
function exampleFunction() {
    if (true) {
        var blockScopedVariable = 20; // var는 블록 스코프를 무시하고 함수 스코프를 따름
        let blockScopedLetVariable = 30; // 블록 스코프 변수
        const blockScopedConstVariable = 40; // 블록 스코프 상수
    }

    console.log(blockScopedVariable); // 에러: 블록 스코프를 무시하므로 변수에 접근 가능
    console.log(blockScopedLetVariable); // 에러: 블록 스코프를 따르므로 변수에 접근 불가
    console.log(blockScopedConstVariable); // 에러: 블록 스코프를 따르므로 변수에 접근 불가
}

 

 

 

이처럼변수의 유효 범위를 선정해주어 변수의 유효 볌위를 제한하여 예기치 못한 변수의 재할당이나 접근을 방지합니다.

이는 코드의 가독성을 높이고 예기치 못한 부작용을 줄이는데 도움의 됩니다.