[기술면접 | JS] 렉시컬 스코프(Lexical Scope)

김준표·2023년 9월 12일
0

CS

목록 보기
5/7
post-thumbnail

렉시컬 스코프

중첩된 함수 그룹에서 내부 함수가 상위 범위의 변수 및 리소스에 접근 할 수 있음을 나타내는 범위 규칙

  • 정적 스코프라고도 불림
  • 함수 정의가 평가되는 시점에 함수가 정의된 환경(= 렉시컬 환경)에 의해 결정됨
  • 함수 내부에서 변수를 접근할 때, 접근을 시도한 함수 내에서 변수를 찾아본다.
    • 변수가 존재하지 않다면 렉시컬 스코프에 의해 렉시컬 환경인 상위 함수에서 다시 변수를 탐색한다.
var X = 1;

function foo() {
  var X = 2;
  bar();
}

function bar() {
  console.log(X); // 1 출력
}
  • foo() 함수가 동작되면 bar() 함수가 동작되며, console.log(X); 가 동작된다.
  • 이 때, foo() 함수에서 호출되었기 때문에 X의 값은 2가 되어야 할 것 같지만, X는 1이다.
  • 이는 렉시컬 스코프의 특징으로, 함수가 정의될 때의 렉시컬 환경에 따라 범위가 변경되기 때문이다.
  • bar() 함수의 정의된 위치가 렉시컬 환경이 되는데, 전역 위치에서 정의하고 있기 때문에 bar()의 렉시컬 환경은 전역이다.
  • 따라서, 렉시컬 스코프에 의해 bar() 내부에서 X 변수를 찾고, 존재하지 않기 때문에 렉시컬 환경인 전역에서 찾기를 시작하여 var X = 1; 을 찾아내고 1을 출력하게 된다.
profile
프론트엔드 개발자 | 문제가 있는 내용이 있다면 댓글로 알려주세요.

0개의 댓글