쓰윽터디/JavaScript

[모던 자바스크립트] 13장 스코프

Kkan 2023. 7. 18. 22:54
728x90
반응형

* 본 블로그 글은 모던 자바스크립트를 읽으며 진행했음을 밝힙니다.

* 개인적인 공부 기록용이, 상업적으로 사용하지 않으며 문제가 있을 시 즉시 글을 내리도록 하겠습니다.

 

13장 스코프

 

 

1. 스코프란?

scope란, 유효범위이다.

자세히 말하면, 매개변수를 참조할 수 있는 유효범위이다.

(var / let / const 가 다 다르다.)

 

var x = 'global';

function foo() {
	var x = 'local';
    console.log(x);
}

foo();	// local

console.log(x)	// global

🚗 이렇게 같은 x 지만 결과 다르다.

🚗 자바스크립트는 어떤 변수를 참조할 지 선택하는데, 이를 식별자 결정 이라고 한다.

🚗 따라서, 스코프란 식별자를 찾는 규칙이라고도 할 수 있다.

🚗 위에 var가 쓰였지만, var는 중복이 가능하다 (중복되면 마지막에 쓰인 변수를 결정한다. => 변수가 오염된다.)

🚗 그래서 let / const를 사용한다.

 

2. 스코프의 종류

구분 설명 스코프 변수
전역 코드의 가장 바깥 영역 전역 스코프 전역 변수
지역 함수 몸체 내부 지역 스코프 지역 변수

🚓 쉽게 말해 함수 내부에 있으면 지역 / 바깥에 있으면 전역 이다.

 

3. 스코프 체인

스코프 체인이란, 스코프가 연결 되는 것이다.

중첩된다고 표현을 하는데, 결과적으로는 중첩을 통해 계층적 구조를 가진다.

🚕 지역스코프가 중첩되면 결국 최상단의 지역 스코프는 전역 스코프가 된다.

 

4. 함수 레벨 스코프

앞서 지역은 함수 몸체 내부라고 했다.이는 함수에 의해서 스코프가 생성된다는 의미이다.다른 언어들은 코드 블록에 의해 스코프가 결정된다.하지만, 자바스크립트에서 var는 오로지 함수의 몸체 (코드 블록)만 지역 스코프로 인정한다.때문에 let / const 와는 또 다른 것이다. (이 친구들은 블록 스코프를 지원한다.)

 

5. 렉시컬 스코프

렉시컬 환경이라는 말이 있다.코드가 어디서 실행되며, 주변에 어떤 코드가 있는 지를 렉시컬 환경이라고 한다.

쉽게 말하면 코드가 어디에 있느냐? 를 생각해보는 것이다.

자바스크립트는 렉시컬 스코프를 따른다.때문에 함수를 어디서 호출했는지가 아니라 함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다.(자스뿐아니라 대부분의 언어가 렉시컬 스코프를 따른다.)

 

끝!

728x90
반응형