TIL 7주차 callback 복습

lim1313·2021년 8월 30일
0

부트캠프 TIL

목록 보기
21/49

클로저 복습

콜백 함수

내부함수 한번만 호출

_.once는 callback 함수를 한 번만 호출하는 '함수'를 리턴합니다.
_.once가 리턴하는 함수를 여러 번 호출해도 callback 함수는 한 번 이상 호출되지 않습니다.

let _.once = function (func) {
  let result = [];

// callback함수를 단 한번만 실행시키기 위함
  return function (...arg) {
    if (result.length === 1) {
      return result[0];
    }
    result.push(func(...arg));
    return result[0];
  };
};

// add에는 내부함수가 할당된다.
const add = _.once((x, y, z) => {
  return x + y + z;
});

// 할당된 내부함수를 실행된다
add(1, 2, 3) // 6
add(4, 5, 6) // 6
add(7, 8, 9) // 6

reduce 구현

_.reduce = function (arr, iteratee, initVal) {
  let acc, newArr;

  if (initVal !== undefined) {
    acc = initVal;
  } else {
    acc = arr[0];
    newArr = _.slice(arr, 1);
  }

  _.each(initVal !== undefined ? arr : newArr, function (value, i, arr) {
    acc = iteratee(acc, value, i, arr);
  });

  return acc;
};

// 리펙토링
_.reduce = function (arr, iteratee, initVal) {
  _.each(arr, function (el, i, arr) {
    if (initVal === undefined) {
      initVal = el;
    } else {
      initVal = iteratee(initVal, el, i, arr);
    }
  });
  return initVal;
};
profile
start coding

0개의 댓글