
스코프(Scope, 유효범위)
참조 대상 식별자(identifier, 변수 , 함수의 이름과 같이 어떠한 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름)를 찾아내기 위한 규칙
Variable"visiblity"
The location where a variable is define dictates where we have access to that variable
전역 스코프 (Global Scope)
지역 스코프 (local scope)
var이 여기에 해당한다.var 키워드로 선언한 변수들은 전역 스코프를 가진 전역 변수로 전역객체(Global Object) window의 프로퍼티이다.let과 const가 여기에 해당한다.자바스크립트 엔진은 식별자를 찾을때 일단 자신이 속한 스코프에서 찾고 그 스코프에 식별자가 없을시 상위 스코프에서 다시 찾아 나간다. 이 현상을 스코프 체인이라고 한다.
스코프가 중첩되어 있을때 발생한다.
함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 상위 스코프를 결정하는 것!
정적 스코프라고도 불리운다.
중첩된 함수나 내부 함수는 상위 몇 레벨 위에 있든 상관 없이 부모 함수나 조부모 함수 등이 액세스하는 동일한 항목에 액세스 할 수 있다.
"함수와 함수가 선언된 어휘적(lexical) 환경의 조합을 말한다. 이 환경은 클로저가 생성된 시점의 유효 범위 내에 있는 모든 지역 변수로 구성된다." -MDN
함수를 리턴하는 함수, 함수와 함수가 선언된 형태
클로저의 핵심은 스코프를 이용해서, 변수의 접근 범위를 닫는(closure; 폐쇄) 데에 있다.
클로저 함수는 외부 함수의 실행이 끝나더라도, 외부 함수 내 변수가 메모리 상에 저장되어 있다.
즉, 외부함수가 실행이 끝나도 내부함수가 외부함수의 변수에 접근 할 수 있다!