— javascript — 1 min read
자바스크립트에는 3가지 스코프가 존재한다.
자바스크립트에는 블록 스코프가 없다. 스코프체인(문법적 스코프 라고도 한다)을 통해 계층구조의 부모를 검색하며 값을 찾는다. 스코프체인을 검색할 때 가장 처음 발견한 값을 사용한다.
스코프는 함수를 정의할 때 결정된다. 이것을 문법적 스코핑(lexical scoping) 이라고 하는데, 스코프체인은 함수를 호출한 위치가 아닌 정의한 위치에 의해 결정된다.
반환된 함수를 통해서 스코프체인을 거쳐 부모함수에 접근할 수 있는 것을 클로저 라고 한다.
1var countUpFromZero = function() { // 부모함수2 var count = 0; // 부모함수의 값3 return function() { // 자식함수4 return ++count; // 부모함수의 값에 접근한다.5 };6}(); // 즉시 실행해서 자식함수를 반환한다.78console.log(countUpFromZero()); // 자식 함수를 실행해서 부모함수의 값에 접근한다. 이것이 클로저9console.log(countUpFromZero());10console.log(countUpFromZero());