[딥다이브] 13장 스코프

주니·2023년 4월 8일
0

딥다이브

목록 보기
7/20

13. 스코프

스코프란?

모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효 범위가 결정된다. 즉, 스코프는 식별자가 유효한 범위를 말한다.

코드의 문맥과 환경

  • 렉시컬 환경: 코드가 어디서 실행되며 주변에 어떤 코드가 있는지 ⇒ 코드의 문맥은 렉시컬 환경으로 이루어진다.
  • 이를 구현한 것이 실행 컨텍스트이며, 모든 코드는 실행 컨텍스트에서 평가되고 실행된다.
  • 프로그래밍 언어에서는 스코프를 통해 식별자인 변수 이름의 충돌을 방지하여 같은 이름의 변수를 사용할 수 있게 한다. 스코프 내에서 식별자는 유일해야 하지만, 다른 스코에는 다른 이름의 식별자를 사용할 수 있다. 즉 스코프는 네임스페이스이다.

이를 폴더 개념으로 설명할 수 있다. 새폴더1 안의 index.html 파일과 새폴더2 안의 index.html 파일은 서로 다른 스코프에 속해 있어 같은 이름을 사용할 수 있는 것!

전역 스코프 vs 지역 스코프

  • 전역 변수는 어디서든 참조할 수 있다.
  • 지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효하다.

스코프 체인:

  • 스코프가 계층적으로 연결된 것을 말한다.
  • 변수를 참조할 때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색한다.
  • 이를 통해 상위 스코프에서 선언한 변수를 하위 스코프에서도 참조할 수 있다. 반대는 불가능하다! 이를 부자 관계로 이뤄진 상속과 유사하다고 표현했다.

함수 레벨 스코프

var 키워드로 선언된 변수는 오로지 함수의 코드 블록(함수 몸체)만을 지역 스코프로 인정한다.

렉시컬 스코프

  1. 동적 스코프: 함수를 어디서 호출했는지에 따라 함수의 상위 스코프를 결정한다.
  2. 정적(렉시컬) 스코프: 함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다.
    ⇒ 자바스크립트를 포함한 대부분의 언어는 이를 따른다.
  • 자바스크립트는 렉시컬 스코프를 따르므로 함수를 어디서 호출했는지가 아니라 어디서 정의했는지에 따라 상위 스코프를 결정한다.
  • 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않는다. 즉, 함수의 상위 스코프는 언제나 자신이 정의된 스코프다.
var x = 1;

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

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

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

0개의 댓글