-
자바스크립트 컨텍스트, 클로저JavaScript 2015. 3. 9. 15:24반응형실행콘택스트
- 함수를 실행할 때마다 새로운 콘택스트가 생성된다. 스택구조를 하고 있고 스택의 Top이 현재의 실행콘텍스트이다. (스택프레임 같은 것)
- 함수외부(글로벌)의 자바스크립트 코드가 실행시 실행콘텍스트는 글로벌오브젝트이다.
- 함수내부의 자바스크립트 코드가 실행시 실행콘텍스트는 함수실행시에 생성된 Call오브젝트이다.
- 실행콘텍스트 == 글로벌/Call오브젝트 와 비슷?
자바스크립트 : 클로저(Closures)
자바스크립트의 클로저는 함수에 부모 함수의 범위에 대한 접근성을 제공한다. 개발자에게는 극히 혼란스러운 개념이다. 필자는 자바스크립트를 배울 당시 의도하지 않은 클로저로 인해 코드를 디버깅하는 데 몇 시간을 소비한 적이 있다. 이런 실수를 통해 배운 이후에는 클로저가 상당히 멋지다고 생각했고 다시 몇 시간 동안 클로저를 사용하여 문제를 해결하려 헛되이 노력하기도 했다.
결국, 배운 것은 클로저는 부모 범위에 대한 접근성을 가진 안쪽 함수(아래 고차 함수 참조)를 반환할 때 유용하다는 점이다. 이로써 변수를 보관하기 위한 일종의 비공개, 또는 보호된 환경이 만들어진다. 아래 예에서 count는 threeTimer가 호출될 때 접근 및 증분되며, 점이나 괄호 기호를 통해 직접 접근할 수는 없다.
// **Closures**
function makeThreeTimer(){
var count = 0;
return function(){
if(count < 3){
console.log('doing work');
count++;
}
else {
throw new Error('No more work');
}
}
}
var threeTimer = makeThreeTimer();
threeTimer(); // logs 'doing work' (count gets incremented)
threeTimer(); // logs 'doing work' (count gets incremented)
threeTimer(); // logs 'doing work' (count gets incremented)
threeTimer(); // throws an error
threeTimer.count; // returns undefined반응형'JavaScript' 카테고리의 다른 글
자바스크립트 정규 표현식(Regular) (0) 2015.04.13 자바스크립트(JavaScript) 리페인트 최소화 하는방법 (0) 2015.03.14 자바스크립트 성능 향상 방법 (0) 2015.03.08 자바스크립트(JavaScript) 전체 태그의 개수 구하는 방법! (1) 2015.03.07 자바스크립트 Keycode(ACSII 코드) 목록 (0) 2015.03.05