<aside>
💡 FeedBack Note
</aside>
*항주님에게 배운 점*항주님은 스코프를 주제로 설명을 해 주셨습니다. 지역 스코프와, 전역 스코프에 대한 개념 그리고 스코프체인 까지 설명을 해 주셨습니다. 개인적으로 렉시컬 스코프 에 대한 이해가 부족했는데. 렉시컬 스코프에 대한 설명과 그리고 이해를 돕기 위한 예제 문제를 가져오신 후에 설명해 주신 덕분에 이해하는데 도움이 됬습니다.
이해를 위한 학습 내용 정리
렉시컬 스코프
프로그래밍 언어에서 상위 스코프를 결정하는 방식은 두 가지가 있다.
호출했는지에 따라 함수의 상위 스코프를 결정한다.정의했는지에 따라 함수의 상위 스코프를 결정한다첫 번째 방식이 동적 스코프다. 함수를 정의하는 시점에는 함수가 어디서 호출될지 알 수 없고 함수가 호출되는 시점에 동적으로 상위 스코프를 결정해야 하기 때문에 동적 스코프라고한다.
두 번째 방식을 렉시컬 스코프 또는 정적 스코프라고 부른다. 함수가 정의가 평가되는 시점에 상위 스코프가 정적으로 결정되기 때문에 정적 스코프라고 부른다. 자바 스크립트를 비롯한 대부분의 프로그래밍 언어는 렉시컬 스코프를 따른다
var x=1;
function foo(){
var x=10;
bar();
}
function bar() {
console.log(x);
}
foo(); //1
bar(); //1
bar가 함수가 선언된다. 객체를 생성함과 동시에 자신이 정의된 위치의 스코프를 기억한다. 그럴 경우에 bar의 상위 스코프는 전역함수이다. var x = 1은 전역 스코프에 선언된 변수다. 그렇기에 var에서 console.log(x)를 할 경우에 참조하는 것은 전역변수의 var x = 1 이다.
그렇다면 만약 동적으로 결정된다면 어떻게 될까? 동적으로 결정되는 것은 첫 번째 의 방법처럼 함수를 어디서 호출했는지에 따라서 달라진다고 하였다.
function foo(){
var x=10;
bar();
}
bar() 가 호출 된 시점에서의 상위 스코프를 결정한다면 foo 함수의 지역변수의 x값을 참조한다. 개인적으로 생각할 때 이런 식으로 상위 스코프를 결정한다면 렉시컬 스코프의 추적이 어려울 것 같다. 즉, 코드의 가독성을 해칠 것 같다는 생각이 들었다.