_.memoize只缓存的第一个参数

时间:2015-01-27 02:10:05

标签: javascript underscore.js

我今天意识到_memoize函数只缓存提供的第一个参数的结果。

function add(a, b) {
  return a + b;
}
var sum = _.memoize(add);
console.log(sum(1,2));
>>> 3
console.log(sum(1,5));
>>> 3

这是一个错误还是故意的?

1 个答案:

答案 0 :(得分:5)

商榷。 Relevant docs

  

默认的hashFunction只使用memoized函数的第一个参数作为键。

但好消息是你可以通过引入自己的哈希函数来改变这种行为。



function myInefficientHashFunction() {
  // not really an efficient hash function
  return JSON.stringify(arguments);
}

function add(a, b) {
  return a + b;
}
var sum = _.memoize(add, myInefficientHashFunction);

document.getElementById('one_two').textContent = sum(1, 2)
document.getElementById('one_three').textContent = sum(1, 3)

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>
<div>1 + 2 = <span id="one_two"/></div>
<div>1 + 3 = <span id="one_three"/></div>
&#13;
&#13;
&#13;