본문 바로가기
자바 풀스택 공부

Day 40-2. [JavaScript] 렉시컬 스코프

by seung_nari 2022. 3. 2.

렉시컬 스코프

var x = 1;

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

function bar() {
    // 지역변수 없어서 바로 전역변수 찾으러 감
    console.log(x);
}

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

 

위 예제의 실행 결과는 bar 함수의 상위 스코프가 무엇인지에 따라 결정된다.

상위 스코프를 결정하는데는 두 가지 방법이 있다.

 

1. 함수를 어디서 호출했는지에 따라 함수의 상위 스코프를 결정한다.

2. 함수를 어디서 정의했는지에 따라 함수의 상위 스코프를 결정한다.

 

첫 번째 방식을 동적 스코프(dynamic scope)라 한다.

두 번째 방식을 렉시컬 스코프(lexical scope) 또는 정적 스코프(static scope)라 한다.

동적 스코프 방식처럼 상위 스코프가 변하지 않고 함수 정의가 평가되는 시점에서 상위 스코프가 정적으로 결정되기 때문에 정적 스코프라고 부른다.

자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따른다.

 

자바스크립트는 렉시컬 스코프를 따르므로 함수를 어디서 호출했는지가 아니라

함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다.

즉, 함수의 상위 스코프는 언제나 자신이 정의된 스코프이다.

댓글