본문 바로가기
자바스크립트 Deep Dive

[Javascript] 렉시컬 스코프란?

by 준생님 2023. 2. 25.

렉시컬 스코프는 정적 스코프라고도 부른다.

렉시컬 스코프는 함수를 어디서 정의했는 지만 확인한다.

즉, 어디서 호출하였는 지는 전혀 중요하지 않다는 뜻이다.

자바스크립트 언어는 렉시컬 스코프 방식을 채택하였다.

 

아래 코드를 보면서 렉시컬 스코프를 이해 해보자.

var x = 1;

function foo() {
    var x = 10;
    bar();
}

function bar() {
    console.log(x);
}

foo(); //1
bar(); //1

첫번째 foo()함수가 호출 되었을 때

foo() 스코프 안에서 x=10인 상태로 bar()를 호출하였음에도 1이 출력된다.

왜냐하면 함수를 정의한 곳은 전역 스코프기 때문에 전역 스코프에 선언된 x를 출력하는 것이다.

 

이에 반대되는 개념은 동적 스코프이다.

동적 스코프 방식을 채택한 언어에서는 어디서 호출했는지를 확인한다.

따라서 첫번째 foo()에서 호출된 bar()는 10의 출력을 기대할 수 있다.