함수의 실행 결과는 상위 스코프가 무엇인지에 따라 결정된다.
프로그래밍 언어는 일반적으로 두 가지 방식 중 한 가지 방식으로 함수의 상위 스코프를 결정한다.
첫번째 방식은 동적 스코프(dynamic scope)라고 한다.
함수를 정의하는 시점에는 함수가 어디서 호출될지 알 수 없다. 따라서 함수가 호출되는 시점에 동적으로 상위 스코프를 결정해야 하기 때문에 동적 스코프라고 부른다.
두번째 방식은 렉시컬 스코프 또는 정적 스코프(static scope)라고 부른다.
함수 정의가 평가되는 시점에 상위 스코픅가 정적으로 결정되기 때문에 정적이다. 자바스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따른다.
자바스크립트는 렉시컬 스코프를 따르므로 함수를 어디서 호출했는지가 아니라
함수를 어디서 정의했는지에 따라 상위스코프를 결정!
함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않는다.
→ 함수의 상위 스코프는 언제나 자신이 정의된 스코프
함수의 상위 스코프는 함수 정의가 실행도리 때 정적으로 결정된다. 함수 정의( 함수 선언문 또는 함수 표현식)가 실행되어 생성된 함수 객체는 이렇게 결정된 상위 스코프를 기억하는데 함수가 호출될 때마다 함수의 상위 스코프를 참조할 필요가 있기 때문임.
참고자료: 모던 자바스크립트 DEEP DIVE