-
Closure 클로져카테고리 없음 2018. 12. 12. 21:30
자바스크립트에서 사용하는 함수 안에 함수이다.
예를 들어, cnt를 하나씩 증가시키는 코드가 있다.
1234567var cnt = 0;function add() {cnt += 1;}add();add();add();cs 간단한 코드지만 cnt가 전역변수처리가 되어 이런 코드가 점점 많아질 수록 관리가 어려워질것이다.
이런 문제를 해결하기 신기한 방법이 있따.
123456789101112var add = function () {var cnt = 0;return function () {cnt += 1;return cnt;}};var obj = add();// add() 시에 return값으로 함수를 받는다console.log(obj()); //1console.log(obj()); //2cs 바로 함수 안에 함수를 정의해서, 그것을 리턴받아 리턴된 함수를 호출할때 함수의 부모 스코프로 접근하는 방법이다.
add의 구조
obj는 리턴받은 함수이다.
이렇게 함으로써 obj변수는 리턴 받은 add객체의 함수을 통해서만 cnt에 접근이 가능하다.
객체 지향의 private과 같은 효과를 낼 수 있다.
12345678910111213141516171819202122232425262728var calc = function () {var sum = 0;return {add: function(value) {sum += value;return sum;},sub: function(value) {sum -= value;return sum;},get: function() {return sum;},set: function(value) {sum = value;return sum;}}}var calculator = calc()calculator.add(10) //10calculator.sub(20) //-10calculator.set(20) //20calculator.get() //20cs 간단하게 만든 계산기..;; ㅎㅎ
리턴함수를 함수여러개를 리턴해줬다.
그래서 각 함수를 호출하여 안에 있는 sum 값을 조작한다.
끝!
댓글