1. 클로저
1 - 1) 클로저란 외부 함수의 변수에 접근할 수 있는 내부 함수 또는 이러한 작동 원리를 일컫는 용어이다.
1 - 2) 클로저 함수는 자기 자신의 스코프, 외부 함수 스코프, 전역 스코프 총 3가지의 스코프에 접근이 가능하다
예시를 통해 클로저에 대해 구체적으로 알아보자!
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//closure
function outerFn(a) {
return function innerFn(b) {
return a + b;
}
}
let sum = outerFn(3)
console.log(sum(2))
// 5
// 위와 같은 예가 클로저이다
// innerFn의 a는 outerFn의 지역 변수로서
// innerFn에서 접근해 사용되었기 때문이다
|
cs |
2. 유용한 클로저 예제
2 - 1) 커링 : 함수 하나가 n개의 인자를 받는 대신, n개의 함수를 만들어 각각 인자를 받게 하는 방법.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function adder(x) {
return function (y) {
console.log(x + y);
};
}
adder(2)(5); //7
let num = adder(100);
// x의 값을 고정시켜서 사용할 수도 있다!
num(5); // 105
num(10); // 110
|
cs |
2 - 2) 클로저 모듈 패턴 : 변수를 스코프 안쪽에 가두어 함수 밖으로 노출시키지 않기 위한 방법.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
function makeCounter() {
let privateCnt = 0;
return {
increment: function () {
privateCnt++;
},
decrement: function () {
privateCnt--;
},
getCnt: function () {
console.log(privateCnt);
}
};
}
let cnt1 = makeCounter();
cnt1.increment();
cnt1.increment();
cnt1.increment();
cnt1.decrement();
cnt1.getCnt(); // 2
let cnt2 = makeCounter();
cnt2.decrement();
cnt2.increment();
cnt2.decrement();
cnt2.decrement();
cnt2.getCnt(); // -2
|
cs |
'Programming Language > Javascript' 카테고리의 다른 글
Rest Parameter & Spread Syntax (0) | 2020.11.06 |
---|---|
Object Oriented Programming (0) | 2020.11.05 |
Scope (0) | 2020.11.04 |
2020/09/30 - JS - 반복문 (0) | 2020.09.30 |
2020/09/18 - JS - 문자열과 관련 메소드 (0) | 2020.09.18 |