본문 바로가기
javascript, node

스코프(scope)란?

by devyongi 2022. 1. 4.

실행컨텍스트를 공부하면서 자연스럽게 스코프에 대해서 공부하게 되었다. 자바스크립트 코드를 작성해보기 전에 배웠던 개념이라 와닿지 않았는데, 지금은 어느정도 이해가 된다.
다른 사람들은 모르겠지만, 나는 우선 코드를 작성해보고 나중에 개념을 봐야 이해가 잘 되는 것 같다.

스코프란?

  • 자바스크립트에서만 쓰이는 개념이 아니고, 모든 언어에서 쓰이는 개념이고 가장 기본적이고 중요한 개념이다.
  • 다른 코드가 참조할 수 있는 범위이다.
  • 변수 이름, 함수 이름, 클래스 이름 같은 식별자가 선언된 위치에 따라 다른 코드에 참조 될 수 있을지 없을지가 결정 된다.

전역에서 선언되면 전역스코프를 갖게 되고, 지역에서 선언된다면 지역스코프를 갖게 된다.

스코프체인이란?

  • 함수의 중첩으로 계층적인 구조를 가질 때, 상위스코프의 값을 참조할 수 있는 것을 스코프체인이라고 한다.

하위 스코프에서 상위 스코프를 참조할 수는 있지만, 반대로는 참조할 수 없다. (단방향성)

스코프 레벨

  • 블록 레벨 스코프(if문, for문, 함수) - 대부분 프로그래밍 언어
  • 함수 레벨 스코프(함수) - javascript(var로 선언되었을 때)

javascrip도 다른 언어와 마찬가지로 블록 레벨 스코프로 사용되기 위해서 ES6에서 let, const 라는 선언문이 생겼다.

상위스코프 결정되는 시점

  • 함수가 호출되는 시점에 결정 : 동적 스코프
  • 함수가 정의되는 시점에 결정 : 정적 스코프(렉시컬 스코프)
    ⇒ javascript는 정적 스코프를 따르기 때문에 선언되는 순간 상위스코프가 결정된다.

자바스크립트에서 함수는 선언되면, 내부 슬롯에 상위스코프에 대한 참조를 저장한다.

댓글