Memoization

对于纯函数,使用相同的参数一次次调用未免太浪费资源。我们可以创建一个函数的 memorized 版本,用来追踪最后一个参数和结果。这样如果我们继续使用同样的值,就不需要反复执行它了。

  1. function memoize(fn) {
  2. var cachedArg;
  3. var cachedResult;
  4. return function(arg) {
  5. if (cachedArg === arg) {
  6. return cachedResult;
  7. }
  8. cachedArg = arg;
  9. cachedResult = fn(arg);
  10. return cachedResult;
  11. };
  12. }
  13. var MemoizedNameBox = memoize(NameBox);
  14. function NameAndAgeBox(user, currentTime) {
  15. return FancyBox([
  16. 'Name: ',
  17. MemoizedNameBox(user.firstName + ' ' + user.lastName),
  18. 'Age in milliseconds: ',
  19. currentTime - user.dateOfBirth
  20. ]);
  21. }