본문 바로가기
FE/JS

memoize-one

by Chars4785 2022. 6. 10.
memoize-one 은 메모라이즈 기법을 잘 이용한 경량 라이브러리 입니다.
공부 할 부분이 많아서 해당 라이브러리를 뜯어 가면서 공부 할 생각입니다.
 
@npm memoize-one

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define(factory) :
  (global = global || self, global.memoizeOne = factory());
}(this, function () { 'use strict';

  function areInputsEqual(newInputs, lastInputs) {
      if (newInputs.length !== lastInputs.length) {
          return false;
      }
      for (var i = 0; i < newInputs.length; i++) {
          if (newInputs[i] !== lastInputs[i]) {
              return false;
          }
      }
      return true;
  }

  function memoizeOne(resultFn, isEqual) {
      if (isEqual === void 0) { isEqual = areInputsEqual; }
      var lastThis;
      var lastArgs = [];
      var lastResult;
      var calledOnce = false;
      function memoized() {
          var newArgs = [];
          for (var _i = 0; _i < arguments.length; _i++) {
              newArgs[_i] = arguments[_i];
          }
          if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {
              return lastResult;
          }
          lastResult = resultFn.apply(this, newArgs);
          calledOnce = true;
          lastThis = this;
          lastArgs = newArgs;
          return lastResult;
      }
      return memoized;
  }

  return memoizeOne;

}));

해당 함수는 크로저 영역에 값을 저장하고 있고 해당 함수를 리턴 함으로 해당 값들에 대한 비교를 통해서 이전 값과 동일 하면 이전값을 배출하고 아니면 현재 새로운 값을 리턴 하도록 되어 있는 함수 이다.


안에 있는 공부 할 것들

 

- rest parma ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters

function myFun(a,  b, ...manyMoreArgs) {
  console.log("a", a)
  console.log("b", b)
  console.log("manyMoreArgs", manyMoreArgs)
}

myFun("one", "two", "three", "four", "five", "six")

// Console Output:
// a, one
// b, two
// manyMoreArgs, ["three", "four", "five", "six"]

- 즉시 실행 함수 ( Immediately-invoked function expression )

(function square(x) {
    console.log(x*x);
})(2);

(function square(x) {
    console.log(x*x);
}(2));

- void 0 ( https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/void

undefined 를 대신 하기 위함 

const output = void 1;
console.log(output);
// expected output: undefined

void console.log('expression evaluated');
// expected output: "expression evaluated"

void function iife() {
  console.log('iife is executed');
}();
// expected output: iife is executed

void function test() {
  console.log('test function executed');
};
try {
  test();
} catch (e) {
  console.log('test function is not defined');
  // expected output: "test function is not defined"
}

 

 

 

'FE > JS' 카테고리의 다른 글

즉시 실행 함수  (0) 2022.06.21
타입스트립트 프로그래밍  (0) 2021.11.16
setTimeOut  (0) 2021.08.17
[Js] 무한 스크롤  (0) 2021.07.31
[ JS ] ES2015  (0) 2019.10.23

댓글