Lexical Environment
1. Environment Record : 모든 지역 변수를 저장하고 있는 객체 (일반적인 변수)
2. Outer Lexical Environment : 자신의 Scope을 제외한 외부의 변수를 저장하는 객체
Closure
- 변수에 함수를 담아두어 Garbage Collection에 의해 함수의 지역 변수값이 사라지지 않도록 함
- 외부함수의 실행 종료로 외부함수의 지역 변수가 소멸했음에도 내부함수가 외부함수의 지역 변수에 접근이 가능
- JS의 함수는 [[Environment]]를 이용해 자신이 어디서 만들어졌는지를 기억함
function addUsingClosure() {
var sum = 0;
return function (number) {
sum += number;
return sum;
};
}
var add = addUsingClosure();
console.log(add(1)); //1
console.log(add(1)); //2
add = null; // 메모리에서 삭제
add = addUsingClosure();
console.log(add(2)); //2 add = null; 이 없다면 4
console.log(add(2)); //4 add = null; 이 없다면 6
var add = (() => {
var sum = 0;
return (number) => {
sum += number;
return sum;
};
})();
console.log(add(1));
console.log(add(1));
console.log(add(2));
console.log(add(2));
function sum(a) {
return function(b) {
return a + b; // 'a'는 외부에서 가져옴
};
}
alert( sum(1)(2) ); // 3
alert( sum(5)(-1) ); // 4
이렇게 쓴다고 외우면 외운대로 쓸 수는 있지만, 이것이 필요한 이유를 잘 모르겠다.
closure가 꼭 필요한 이유가 있을까? 좀 더 쉽게 코드를 작성할 수 있으면 그것을 사용하는게 가독성, 생산성 측면에서 더 적절한 듯 하다.
출처
'IT > Programming Language' 카테고리의 다른 글
Generic이란 (0) | 2022.03.06 |
---|---|
[Javascript] 비동기 처리 방식 (0) | 2022.02.20 |
[Javascript] var -> let, const (0) | 2022.02.19 |
[Javascript] ... 활용 (0) | 2022.02.19 |
[Javascript] Arrow Function vs Function (0) | 2021.10.31 |
댓글