클로저 : 외부 함수의 변수에 접근할 수 있는 내부 함수
-> 안쪽에선 바깥쪽 모두다 참조가 가능하다. 그러므로 총 3개에 접근 가능 하다.
클로저 함수 : 외부 함수의 변수에 접근할 수 있는 내부 함수
->함수 outerFn(); 호출 하면 먼저 console.log(outerVar)먼저 해주고, 실행되지 않은 innerFn함수를 리턴합니다.
-> 1번 : outer 와 inner이 출력된다. // ()()괄호가 두개 이면 바깥함수와 안쪽 함수 둘다 호출 하는것이다.
-> 2번 : outer 이 출력된다. // outerFn(); 할경우 outerFn이 출력되고 innerFn은 그냥 리턴된다. 근데 그것을 innerFn변수에 담으면 리턴 innerFn은 리턴되지 않는다.
-> 3번 : inner 이 출력된다. // 위에서 innerFn에 리턴되지 않은 innerFn()함수를 담았으므로 innerFn()함수가 실행되면서 innerFn을 출력한다.
1. 커링 : 함수 하나가 n개의 인자를 받는 대신 n개의 함수를 만들어 각각 인자를 받게 하는 방법
-> adder(2)(3)을 호출하면 x에 2 y에 3이 들어간다.
커링을 사용하는 이유는 값을 고정 해놓고 사용이 가능해진다.
이런식으로 함수의 값을 고정해놓고 사용 할 수 있다. !
2. 모듈패턴 : 변수를 스코프 안쪽에 가두어 함수 밖으로 노출 시키지 않는 방법
-> 객체를 사용 하는것과 비슷하다. counter1 에 makeCounter()을 초기화 하고 , 변수counter1.increment();를 하면 객체에 키 값을 불러오듯 privateCounter ++ 값을 실행한다. 두번 실행하고 리턴하는 키 getValue를 counter1.getValue();를 하면 위에서 두번 ++ 했으로 최종값 2 출력이된다.