자바스크립트 함수의 블록 스코프 (Function Block Scope)

블록 스코프란, 중괄호 {}로 감싸진 코드 블록 안에서 변수의 범위(scope)가 제한되는 것을 의미합니다. 함수 내부에서 선언된 변수는 오직 그 함수 내에서만 접근하고 사용할 수 있습니다. 이를 함수 스코프라고 부릅니다.

블록 스코프의 중요성을 이해하기 위해, 먼저 전역 스코프와 함수 스코프의 차이점을 살펴보겠습니다.

var globalVariable = "전역 변수";

function myFunction() {
  var functionVariable = "함수 내 변수";
  console.log(globalVariable);   // 전역 변수에 접근 가능
  console.log(functionVariable); // 함수 내 변수에 접근 가능
}

console.log(globalVariable);     // 전역 변수에 접근 가능
console.log(functionVariable);   // ReferenceError: functionVariable is not defined

위의 예제에서, globalVariable은 전역 스코프에 선언되었기 때문에 어디서든 접근 가능합니다. 하지만 functionVariable은 함수 스코프에 선언되었기 때문에 함수 외부에서는 접근할 수 없습니다.

이제 블록 스코프의 예제를 살펴보겠습니다.

function myFunction() {
  if (true) {
    var blockVariable = "블록 내 변수";
    let blockScopedVariable = "블록 내 스코프 변수";
  }
  console.log(blockVariable);        // 블록 외부에서도 접근 가능
  console.log(blockScopedVariable);  // ReferenceError: blockScopedVariable is not defined
}

myFunction();

위의 예제에서, blockVariable 변수는 if문의 블록 내에서 선언되었지만, 함수 블록 내부에서도 접근 가능합니다. 이는 var 키워드를 사용하여 선언하였기 때문입니다. 반면에, blockScopedVariable 변수는 let 키워드로 선언되었기 때문에 블록 외부에서는 접근할 수 없습니다.

블록 스코프는 let과 const 키워드로도 선언할 수 있으며, 이는 특정 코드 블록 내에서만 유효한 변수를 생성합니다.

블록 스코프는 코드의 가독성과 유지보수를 개선하는 데 도움이 됩니다. 코드 블록 안에서 선언된 변수는 그 블록 밖에서는 사용되지 않으므로 충돌이나 오류를 방지할 수 있습니다.

따라서 함수 내부에서 변수를 사용할 때는 항상 블록 스코프를 고려하여 변수를 선언해야 합니다.