스코프와 클로저의 관계 이해하기

스코프란 무엇인가요?

스코프는 변수와 함수의 유효범위를 결정하는 개념입니다. 스코프 내에서 변수와 함수는 접근할 수 있으며, 스코프 밖에서는 접근할 수 없습니다.

클로저란 무엇인가요?

클로저는 함수와 그 함수가 선언된 렉시컬 환경의 조합입니다. 클로저는 함수 내부에서 선언된 변수에 접근할 수 있는 함수입니다. 이렇게 함수 내부의 지역변수가 함수 외부에서도 유지되는 것이 클로저의 특징입니다.

스코프와 클로저의 관계는 어떻게 되나요?

클로저는 스코프를 기반으로 동작합니다. 함수가 선언되는 시점에서 해당 함수의 외부 스코프에 접근할 수 있는 렉시컬 환경을 기억해둡니다. 이후에 클로저가 호출되면 클로저는 이 기억해둔 외부 스코프에 접근하여 변수나 함수를 사용할 수 있습니다.

즉, 클로저는 자신이 선언된 스코프를 벗어나더라도, 그 스코프에 접근할 수 있도록 유지합니다. 따라서 클로저를 통해 함수 외부의 변수에 접근하거나, 함수를 클로저와 함께 반환할 수 있습니다.

스코프와 클로저의 활용 예시

function outer() {
  let count = 0;

  return function inner() {
    count++;
    console.log(count);
  };
}

const myClosure = outer();
myClosure(); // 1
myClosure(); // 2

위의 예시에서 outer 함수는 내부에 count 변수를 가지고 있습니다. outer 함수는 inner 함수를 반환하는데, inner 함수는 outer 함수 내부에 선언된 count 변수에 접근하여 값을 증가시키고 출력합니다.

위 코드에서 myClosure는 outer 함수가 반환한 inner 함수를 가리키는 클로저입니다. myClosure를 호출하면 count 변수에 접근하여 값을 변경하고 출력합니다. 여기서 count 변수는 outer 함수의 스코프에 속해 있지만, 클로저를 통해 함수 외부에서도 접근이 가능합니다.

결론

스코프와 클로저는 JavaScript에서 중요한 개념입니다. 스코프는 변수와 함수의 유효범위를 결정하고, 클로저는 함수 내부의 변수에 접근할 수 있는 함수입니다. 스코프와 클로저를 잘 이해하면 JavaScript에서 좀 더 효율적이고 강력한 코드를 작성할 수 있습니다.

#Javascript #클로저