실행컨텍스트를 공부하면서 자연스럽게 스코프에 대해서 공부하게 되었다. 자바스크립트 코드를 작성해보기 전에 배웠던 개념이라 와닿지 않았는데, 지금은 어느정도 이해가 된다.
다른 사람들은 모르겠지만, 나는 우선 코드를 작성해보고 나중에 개념을 봐야 이해가 잘 되는 것 같다.
스코프란?
- 자바스크립트에서만 쓰이는 개념이 아니고, 모든 언어에서 쓰이는 개념이고 가장 기본적이고 중요한 개념이다.
- 다른 코드가 참조할 수 있는 범위이다.
- 변수 이름, 함수 이름, 클래스 이름 같은 식별자가 선언된 위치에 따라 다른 코드에 참조 될 수 있을지 없을지가 결정 된다.
전역에서 선언되면 전역스코프를 갖게 되고, 지역에서 선언된다면 지역스코프를 갖게 된다.
스코프체인이란?
- 함수의 중첩으로 계층적인 구조를 가질 때, 상위스코프의 값을 참조할 수 있는 것을 스코프체인이라고 한다.
하위 스코프에서 상위 스코프를 참조할 수는 있지만, 반대로는 참조할 수 없다. (단방향성)
스코프 레벨
- 블록 레벨 스코프(if문, for문, 함수) - 대부분 프로그래밍 언어
- 함수 레벨 스코프(함수) - javascript(var로 선언되었을 때)
javascrip도 다른 언어와 마찬가지로 블록 레벨 스코프로 사용되기 위해서 ES6에서 let, const 라는 선언문이 생겼다.
상위스코프 결정되는 시점
- 함수가 호출되는 시점에 결정 : 동적 스코프
- 함수가 정의되는 시점에 결정 : 정적 스코프(렉시컬 스코프)
⇒ javascript는 정적 스코프를 따르기 때문에 선언되는 순간 상위스코프가 결정된다.
자바스크립트에서 함수는 선언되면, 내부 슬롯에 상위스코프에 대한 참조를 저장한다.
'javascript, node' 카테고리의 다른 글
[javaScript] Nullish coalescing operator(??) 사용하기 (0) | 2022.02.19 |
---|---|
키 자판으로 이벤트 주기(onKeyPress) (0) | 2022.01.13 |
실행 컨텍스트(Execution Context) - Outer (0) | 2022.01.02 |
실행 컨텍스트(Execution Context) - Record (0) | 2021.12.28 |
javascript ++연산자 (0) | 2021.11.27 |
댓글