클로저렉시컬 스코프는 자바스크립트의 함수와 변수의 동작 방식을 이해하는 데 매우 중요한 개념입니다.

아래에서 각각의 개념과 그 관계를 자세히 설명하겠습니다.


1. 렉시컬 스코프 (Lexical Scope)

const globalVar = "전역";

function outer() {
  const outerVar = "외부";

  function inner() {
    const innerVar = "내부";
    console.log(globalVar);  // 전역 변수, 접근 가능
    console.log(outerVar);   // outer 함수의 변수, 접근 가능
    console.log(innerVar);   // inner 함수의 변수, 당연히 접근 가능
  }

  inner();
}

outer();


2. 클로저 (Closure)

function makeCounter() {
  let count = 0; // makeCounter의 지역 변수

  // inner 함수는 makeCounter의 렉시컬 스코프에 있는 count에 접근할 수 있다.
  return function() {
    count += 1;
    return count;
  };
}

const counter = makeCounter(); // 클로저 생성: counter 함수는 makeCounter의 렉시컬 환경(count)에 대한 참조를 가짐.
console.log(counter()); // 1
console.log(counter()); // 2


3. 클로저와 렉시컬 스코프의 관계