클로저와 스코프

스코프

스코프는 변수의 유효 범위를 정의하는 것을 의미합니다. JavaScript에서는 전역 스코프와 지역 스코프로 구분됩니다. 전역 스코프는 코드 어디에서든 접근할 수 있는 변수를 가지며, 지역 스코프는 특정한 블록 내에서만 접근할 수 있는 변수를 가집니다.

예를 들어, 다음과 같은 코드를 보겠습니다.

function sayHello() {
  var name = "John";
  console.log("Hello, " + name);
}

sayHello();
console.log(name);  // 오류: name은 정의되지 않음

이 코드에서 name 변수는 sayHello() 함수 내에서 정의되었기 때문에 지역 스코프에 속합니다. 그렇기 때문에 함수 외부에서는 해당 변수에 접근할 수 없습니다.

클로저

클로저는 함수 내부에서 정의된 함수가 외부 변수에 접근할 수 있는 능력을 의미합니다. 이는 함수가 스코프 체인을 통해 외부 변수에 접근할 수 있도록 합니다.

다음은 클로저의 간단한 예시입니다.

function outerFunction() {
  var outerVariable = "Hello";

  function innerFunction() {
    console.log(outerVariable);
  }

  return innerFunction;
}

var closure = outerFunction();
closure();  // "Hello" 출력

이 코드에서 innerFunction은 외부 함수인 outerFunction 내에 정의되었습니다. 하지만 innerFunctionouterVariable 변수에 접근할 수 있습니다. outerFunction이 호출된 후에도 innerFunction을 호출하면 여전히 outerVariable에 접근할 수 있습니다. 이러한 동작이 클로저의 특징입니다.

클로저는 자바스크립트에서 유용한 패턴 중 하나이며, 모듈화, 비동기 처리 등 다양한 상황에서 활용됩니다.

#programming #javascript