함수가 만들어질 때의 바깥 변수를 기억하는 성질을 이해합니다.
클로저는 내부 함수가 바깥 함수 실행이 끝난 뒤에도 lexical environment의 변수에 접근하는 현상입니다. 카운터처럼 외부에서 직접 바꿀 수 없는 상태를 만들 수 있지만 필요 없는 큰 객체를 오래 참조하면 메모리가 유지될 수 있습니다.
코드를 읽을 때는 function outer(){ let value=0; return () => ++value; } 부분부터 찾으세요. 현재 값과 실행 순서를 줄마다 적어 보면 문법을 외우지 않아도 결과를 예측할 수 있습니다.
함께 바뀌는 값과 동작에 이름을 붙여 여러 곳에서 재사용할 때 적합합니다. 추상화부터 만들기보다 실제 호출부가 반복되거나 교체되어야 하는지 먼저 확인하세요.
실행하기 전에 예상 결과를 짧게 적은 뒤 증가와 감소 함수를 함께 반환하는 객체 형태로 바꾸세요. 실제 출력이 다르면 콘솔에 처음 나타난 오류와 그 직전 값을 차례로 확인하세요.
반복문에서 var 하나를 공유한 오래된 패턴은 모든 콜백이 마지막 값을 보는 문제가 생길 수 있습니다. 블록 스코프 let을 사용하세요.
직접 바꿔보세요증가와 감소 함수를 함께 반환하는 객체 형태로 바꾸세요.