[JS] 클로저(Closer)를 통한 순수함수 만들기

K00·2022년 8월 29일
0
post-thumbnail

🔎 일반함수

const WS = ["일", "월", "화", "수", "목", "금", "토"];

//Before
let idx = 0;
function week(params) {
  if (idx >= WS.length) {
    idx = 0;
  }

  return WS[idx++];
}

console.log(week()); //월
console.log(week()); //화
console.log(week()); //수
console.log("---------");

🔎 클로저를 사용해서 순수함수를 만든 예시

전역에 단순히 idx변수를 값을 저장하는 용도로 선언할 필요가 없다 .
따라서 변수선언을 가까히 할수있고(=함수 내부에) , 부수효과(side Effect)를 발생시키지 않음(=외부에서 수정못함)

let ih2 = (function newWeek() {
  let idx = 0; 
  //함수 내부에 선언해도 참조되고 있기 때문에 초기화가 안된다.
 
  return () =>{
    if (idx >= WS.length) idx = 0;
    return WS[idx++]};
})();

console.log(ih2()); //월
console.log(ih2()); //화
console.log(ih2()); //수

🔖 클로저 일반함수 원리

WS[idx++]의 상위 scope에 위치한 idx변수를 외부환경참조(outer invironment reference)로 값을 기억하고 있기때문에 idx값을 유지할수 있다.

0개의 댓글