Scoping and the scope chain

Juyeon Lee·2022년 1월 26일
0

스코핑

변수들이 어디에 위치하는지, 특정 변수를 어디에서 접근할 수 있고 어디에서 접근할 수 없는지를 나타낸다.

렉시컬 스코핑(lexical scoping)

함수와 블록이 코드 내에 배치되는 방식에 의해서 코드의 스코핑이 제어되는 것을 말한다.

스코프

특정 변수가 선언된 공간이나 환경을 말한다. 스코프에는 글로벌 스코프, 함수 스코프, 블록 스코프가 있다.

변수의 스코프(scope of a variable)

특정 변수를 코드 내에서 접근할 수 있는 영역이다.

글로벌 스코프에서 선언된 변수는 어디에서나 접근할 수 있다. 함수 스코프는 함수 내부에서만 접근이 가능하며, 함수 외부에서는 접근이 불가하다. 블록 스코프는 블록 내부에서만 접근이 가능한데, 이는 let과 const 변수에만 적용된다. 엄격 모드(strict mode)에서는 함수도 블록 스코프를 가진다. 참고로 var는 가장 가까운 함수 스코프를 가지게 된다.

스코프에서 흥미로운 점은, 자신의 스코프 내에 없는 변수에도 접근이 가능하다는 점인데, 이는 상위 스코프에서만 접근이 가능하다. 이렇게 상위 스코프에서 변수를 찾는 것을 변수 탐색(variable look-up)이라고 한다.

SCOPE CHAIN VS CALL STACK

다음으로 스코프 체인과 콜스택 차이점을 알아보자


출처: 유데미

위에 보는 것처럼, 콜 스택은 먼저 글로벌 실행 환경이 제일 먼저 들어가고 그 위에 차곡차곡 함수의 실행 환경이 들어간다.

이에 비해, 스코프 체인은 먼저 글로벌 스코프가 맨 위에 있고, 그 아래로 첫 번째와 세 번째 함수가 오며, 두 번째 함수는 첫 번째 함수 안에 있으므로 첫 번째 함수의 자식이 된다.

여기서 볼 수 있듯이, 콜 스택에서 첫 번째 - 두 번째 - 세 번째 함수 순으로 호출되더라도 스코프와는 상관이 없다. 스코프는 코드의 작성된 위치에 따라 범위를 설정하기 때문이다.

0개의 댓글