오늘은 스코프와 클로저에 대해서 배웠다.
스코프(Scope)란 [변수의 사용범위]이다.
뭔가 별것 아닌것 처럼 느껴지지만 기본적으로 모든 원시코드, 참조코드의 중심에는 변수가 있다. 이 변수가 어딘가에서는 사용이 가능하고 어느 범위를 벗어나면 사용하지 못한다. 정확히는 사용하지 못하는게 아니라 접근자체를 할수가 없다.
하나의 보이지않는 장벽처럼 작용하는 것이다.
여기서 중요한건 외부는 내부의 변수로 접근할수 없고,
내부는 반대로 외부로 접근이 가능하다.
자바스크립트에서는 let변수와 var변수가 여기서 결정적인 차이가 나는데
이것은 추후에 따로 기술할 예정이다. 조금 편하게 얘기하면 var변수의 결점을 보완하기 위해
만들어진 것이 let변수다.
그냥 예시를 들어서 함수내부에서 '선언'이 된 변수는 지역변수라고 한다.
이 변수는 자신을 포함하고 있는 함수의 범위를 벗어나면 소멸된다.
그와 반대로 모든 함수의 바깥. 즉 런타임에 직접적으로 바로 엑세스 되는 변수(그냥 모든 함수 바깥에서 선언된 변수)는 전역변수라고 한다.
전역변수는 어디서든 사용될수있다.
자바스크립트는 lexical 스코프 라는 기준점을 가지고있는데 일종의 규약이다.
스코프의 범위는 함수의 선언!(호출이 아니다)과 동시에 정해지는데,
이렇게 보기와 같이 선언과 동시에 이루어 진다는 것은.
선언된 장소에서 상위 스코프를 결정하는 것이다.
이것은 타언어의 동적 스코프와는 방향을 달리하기때문에 알고가야할 지식이다.