본문 바로가기
IT

JS: lexical scope

by 오늘도히어로 2024. 7. 24.
반응형

 

 

lexical 사전적 뜻 : 1.어휘의, 사전(편찬)의(cf. GRAMMATICAL)

 

개발적으로는..

 

렉시컬 스코프(lexical scope)는 자바스크립트와 같은 프로그래밍 언어에서 변수가 어디에서 정의되었는지에 따라 그 변수의 유효 범위(scope)를 결정하는 방식입니다. 렉시컬 스코프는 코드가 작성된 시점(정적 스코프)에서 변수의 스코프를 결정하며, 실행 시점에서는 변수가 어디에서 호출되었는지에 영향을 받지 않습니다.

 

렉시컬 스코프의 주요 개념

 

1. 정적 스코프:

렉시컬 스코프는 코드가 작성된 위치에 따라 스코프가 결정됩니다.

코드가 실행될 때가 아니라 작성될 때 스코프가 결정됩니다.

 

2. 함수 스코프:

함수 내부에서 정의된 변수는 함수 내부에서만 접근할 수 있습니다.

함수 밖에서는 해당 변수를 접근할 수 없습니다.

 

3. 블록 스코프:

letconst 키워드를 사용하여 정의된 변수는 블록({ }) 내부에서만 접근할 수 있습니다.

var 키워드로 정의된 변수는 함수 스코프를 가지며, 블록 스코프를 무시합니다.

 

예제 코드

 

다음은 렉시컬 스코프의 개념을 설명하는 예제 코드입니다:

let globalVar = "global";

function outerFunction() {
  let outerVar = "outer";

  function innerFunction() {
    let innerVar = "inner";

    console.log(globalVar); // "global" - globalVar는 전역 스코프에 있습니다.
    console.log(outerVar);  // "outer"  - outerVar는 outerFunction 스코프에 있습니다.
    console.log(innerVar);  // "inner"  - innerVar는 innerFunction 스코프에 있습니다.
  }

  innerFunction();
}

outerFunction();

예제 설명

 

1. 전역 스코프:

globalVar는 전역 스코프에 정의되어 있습니다. 따라서 모든 함수 내에서 접근할 수 있습니다.

 

2. 함수 스코프:

outerFunction 내부에 정의된 outerVarouterFunction 내부에서만 접근할 수 있습니다.

innerFunctionouterFunction 내부에 정의되어 있으므로 outerVar에 접근할 수 있습니다.

 

3. 블록 스코프:

innerFunction 내부에 정의된 innerVarinnerFunction 내부에서만 접근할 수 있습니다.

 

 

렉시컬 스코프와 클로저

 

렉시컬 스코프는 클로저의 개념과도 밀접한 관련이 있습니다. 클로저는 함수와 함수가 선언된 렉시컬 환경의 조합을 의미합니다. 클로저는 함수가 선언된 환경을 기억하고, 그 환경 외부에서 호출되더라도 그 환경에 접근할 수 있게 합니다.

function makeCounter() {
  let count = 0;

  return function() {
    count++;
    return count;
  };
}

const counter1 = makeCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2

const counter2 = makeCounter();
console.log(counter2()); // 1
console.log(counter2()); // 2

클로저 예제 설명

 

1. makeCounter 함수count 변수를 가지며, 이 변수를 증가시키는 함수를 반환합니다.

2. counter1counter2는 각각 makeCounter 함수의 새로운 인스턴스를 생성합니다.

3. 각각의 클로저는 독립적인 렉시컬 환경을 가지며, 서로 다른 count 변수를 유지합니다.

 

렉시컬 스코프는 자바스크립트에서 변수가 어떻게 유효 범위를 가지는지를 이해하는 데 중요한 개념입니다. 이를 통해 함수 내부와 외부에서 변수에 어떻게 접근하고, 관리할 수 있는지를 명확하게 알 수 있습니다.

반응형