TIL 7週目callback復習

1223 ワード

Closerの復習


コールバック関数


内部関数は1回のみ呼び出されます


.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;
};