[FE Study] Javascript - (5)

365.48km·2023년 1월 12일
0

[FE Study] JavaScript

목록 보기
5/5
post-thumbnail

1. 스코프

스코프란? 💡

  • 모든 식별자(변수 이름, 함수 이름, 클래스의 이름 등)는 자신이 선언된 위치에 의해 다른 코드가 식별자 자신을 참조할 수 있는 유효범위를 결정한다. 이를 스코프라 한다.
  • 스코프는 식별자가 유효한 범위를 의미한다.
function add(x,y){
  // 매개변수는 함수 몸체 내부에서만 참조할 수 있다.
  // 즉, 매개변수의 스코프(유효범위)는 함수 몸체 내부이다.
  console.log(x,y) // 2, 5
  return x+y
}
add(2,5)

// 매개변수는 함수 몸체 내부에서만 참조할 수 있다.
console.log(x,y) // ReferenceError: x is not defined

1.1. 식별자 결정(identifier resolution)

식별자 결정이란? 💡

  • `자바스크립트 엔진이 스코프 체인을 통해 참조할 변수를 검색(결정)하는 것
  • 아래의 예시처럼 자바스크립트 엔진은 같은 두 개의 변수 중에서 어떤 변수를 참조해야 할 것인지를 결정하는 것을 말한다.

const x = 'global';

function foo(){
	const x = 'local'
    console.log(x) // local
}

foo()

console.log(x) // global

1.2. 스코프 개념이 없다면?

  • 스코프라는 개념이 없다면 같은 이름을 갖는 변수는 충돌을 일으키므로, 프로그램 전체에서 하나 밖에 사용할 수 없을 것이다.
  • 스코프를 통해서 식별자인 변수 이름의 충돌을 방지하고 같은 이름의 변수를 사용할 수 있게 한다.
  • 스코프 내에서 식별자는 유일해야 하지만, 다른 스코프에서 같은 이름의 식별자를 사용할 수 있게 한다. 즉, 스코프는 네임스페이스이다.

식별자의 특성 💡

  • 식별자는 어떤 값을 구별할 수 있어야 하므로, 유일 해야한다.

2. 스코프의 종류

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

2.1. 전역 스코프

전역이란?💡

  • 전역은 전역 스코프를 만든다.
  • 전역에서 변수를 선언하면 전역 스코프를 갖는 전역 변수가 된다.
  • 전역 변수는 어디서든 참조할 수 있다.

2.2. 지역 스코프

지역이란?💡

  • 함수 몸체 내부를 말한다.
  • 지역에 변수를 선언하면 지역 스코프를 갖는 지역 변수가 된다.
  • 지역 변수는 자신이 선언된 지역과 하위 지역(중첩 함수)에서만 참조할 수 있다.
  • 즉, 지역 변수는 자신의 지역 스코프와 하위 지역 스코프에서 유효하다.

*중첩함수

  • 함수 몸체 내부에서 정의한 함수

3. 스코프 체인

스코프 체인이란?💡

  • 스코프가 함수의 중첩에 의해 계층적 구조를 갖는다.
  • 모든 스코프는 하나의 계층적 구조로 연결되며, 모든 지역 스코프의 최상위 스코프는 전역 스코프다.
  • 스코프가 계층적으로 연결된 것을 스코프 체인이라 한다.

ex) 전역 스코프 ← outer 함수 지역 스코프 ← inner 함수 지역 스코프

*변수를 참조할 때, 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색(identifier resolution)한다.
이를 통해 상위 스코프에서 선언한 변수를 하위 스코프에서도 참조할 수 있다.
하지만, 하위 스코프에서 선언한 변수는 상위 스코프에서 참조할 수 없다.

렉시컬 환경이란?💡

  • 스코프 체인은 물리적인 실체로 존재한다.
  • 자바스크립트 엔진은 코드를 실행하기에 앞서 렉시컬 환경을 실제로 생성한다.
  • 스코프 체인은 실핼 컨텍스트의 렉시컬 환경을 단방향으로 연결한 것이다.
  • 전역 렉시컬 환경은 코드가 로드되면 곧바로 생성되고 함수의 렉시컬 환경은 함수가 호출되면 곧바로 생성된다.

4. 함수 레벨 스코프

profile
이게 마즐까?

0개의 댓글