함수가 만들어질 때의 바깥 변수를 기억하는 성질을 이해합니다.
클로저는 내부 함수가 바깥 함수 실행이 끝난 뒤에도 lexical environment의 변수에 접근하는 현상입니다. 카운터처럼 외부에서 직접 바꿀 수 없는 상태를 만들 수 있지만 필요 없는 큰 객체를 오래 참조하면 메모리가 유지될 수 있습니다.
createCounter(5)가 실행을 마치고 나면 지역 변수 value에 접근할 수 있는 것은 반환된 화살표 함수뿐입니다. counter를 호출할 때마다 같은 value가 1씩 늘어나 6, 7, 8이 차례로 나오는데, 템플릿 리터럴 안의 세 호출이 왼쪽부터 평가되기 때문에 이 순서가 보장됩니다. createCounter를 다시 호출하면 별도의 value를 가진 새 카운터가 만들어집니다.
함께 바뀌는 값과 동작에 이름을 붙여 여러 곳에서 재사용할 때 적합합니다. 추상화부터 만들기보다 실제 호출부가 반복되거나 교체되어야 하는지 먼저 확인하세요.
반복문에서 var 하나를 공유한 오래된 패턴은 모든 콜백이 마지막 값을 보는 문제가 생길 수 있습니다. 블록 스코프 let을 사용하세요.
직접 바꿔보세요증가와 감소 함수를 함께 반환하는 객체 형태로 바꾸세요.