js scope 스코프, 렉시컬 스코프
- 전역 변수, 지역 변수 구분하는 것이다
- 스코프 ; 중괄호로 묶인 영역
전역, 지역 변수
1 | const f = () => { |
- 함수 f 에 선언된 f의 지역변수
x
를 바깥에서 사용하지 못하는 모습이다
1 | const x = 123; |
- 반대로 함수에서는 바깥에 선언된 전역 변수 x를 사용할 수 있다
1 | const x = 123; |
- 전역 변수, 지역 변수에 동일한 이름의 변수가 있으면 가까운 변수를 참조한다
스코프 체인
1 | let x = 1; |
- 가깝다는 것은 일단
{}
스코프를 기준으로 - 일단 자기 자신이 속한 스코프에서 변수 x를 찾는다
- 없으면 상위 스코프에서 찾는다
- 찾을 때까지 반복한다
- 이를 스코프 체인이라고 한다
- 근데 이 스코프에 의한 전역, 지역 변수 구분은,
- 그러니까 내가 진짜로 참조하는 변수는 스코프를 선언할 때 결정된다 (렉시컬 스코핑)
렉시컬 스코핑
1 | let x = 1; |
- 선언할 때 결정된다는 것은
- 위 코드의 결과처럼
- 함수 f 가 선언 당시에 최상위 스코프의
let x = 1
을 바라본다는 것이다 - 함수 main을 보면 함수 f가 실행되기 전에 스코프의
let x = 999
는 함수 f에 영향을 주지 않는다
- 이런 개념들은 js를 하면서 그냥 익숙해져 있어서 용어로 설명할 수 있을 정도는 아니었다
- 이번 기회에 js 개념, 용어들을 정리해봐야겠다