[javascript] 블록 스코프와 클로저

자바스크립트에서 변수 스코프는 함수 스코프를 따릅니다. 그러나 ES6부터는 letconst 키워드를 사용하여 블록 스코프 변수를 선언할 수 있습니다. 블록 스코프는 해당 변수가 선언된 중괄호 블록 내에서만 유효하게 됩니다.

블록 스코프

예를 들어, 다음과 같이 if문 내에서 let으로 변수를 선언하면 블록 스코프가 적용됩니다.

if (true) {
  let name = 'John';
  console.log(name); // 출력: John
}
console.log(name); // 에러: name이 정의되지 않음

이처럼 블록 스코프 변수의 범위는 중괄호로 제한되므로 외부에서 접근할 수 없습니다.

클로저

클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있는 메커니즘을 의미합니다. 아래의 예제에서는 클로저를 사용하여 내부 함수가 외부 함수의 변수에 접근하는 방법을 보여줍니다.

function outerFunction() {
  let outerVar = 'I am outer';

  function innerFunction() {
    console.log(outerVar); // 외부 함수의 변수에 접근
  }

  return innerFunction;
}

let innerFunc = outerFunction();
innerFunc(); // 출력: I am outer

이처럼 클로저를 이용하면 외부 함수의 변수에 접근하여 활용할 수 있습니다.

블록 스코프와 클로저를 이해하면 변수의 범위와 생명주기를 더욱 명확하게 이해할 수 있으며, 안전하고 효율적인 코드를 작성할 수 있습니다.

참고 자료: MDN web docs