하루 기록

13장, 스코프 본문

Book/모던 자바스크립트 Deep Dive

13장, 스코프

떼굴펜 2024. 5. 2. 21:08

 스코프(Scope, 유효범위)는 식별자가 유효한 범위를 말하며, 전역(global)지역(local) 두가지로 구분된다.

말 그대로 전역은 코드의 가장 바깥 영역이다. 전역에 선언한 변수는 어디에서든 참조할 수 있는 값이 된다.

전역과 반대로 지역은 함수 내부를 말한다. 지역변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효하다.

 

var a = "전역변수 aaa^_^a";
var b = "전역변수 bbb^_^b";

function outer () {
    var c = "아우터 안의 C";

    console.log(a);      // "전역변수 aaa^_^a";
    console.log(b);      // "전역변수 bbb^_^b";
    console.log(c);      // "아우터 안의 지역 c";
    
    function inner() {     
         var x = "이너 안의 a";

         console.log(a);      // "이너 안의 지역 a";
         console.log(b);      // "전역변수 bbb^_^b";
         console.log(c);      // "아우터 안의 지역C";
     }
     inner();
}

outer();

console.log(a);      // "전역변수 aaa^_^a";
console.log(c);      // ReferenceError : c is not defined

 

 위 코드의 계층 구조를 그림으로 나타내면 아래와 같이 그릴 수 있다. 이렇게 스코프가 계층적으로 연결된 것을 스코프 체인이라 하며, 자바 스크립트 엔진은 코드를 실행하기 전에 그림과 유사한 자료구조인 렉시컬 환경(Lexical Environment)를 실제로 생성한다.

 자바스크립트의 렉시컬 스코프(함수를 어디에서 정의했는지에 따라서 상위 스코프를 결정한다)와 반대되는 개념은 동적 스코프(함수를 어디에서 호출했는지에 따라 상위 스코프를 결정한다)이다.