스코프(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; 폐쇄) 데에 있다.
클로저 함수는 외부 함수의 실행이 끝나더라도, 외부 함수 내 변수가 메모리 상에 저장되어 있다.
즉, 외부함수가 실행이 끝나도 내부함수가 외부함수의 변수에 접근 할 수 있다!