krutoy, не вижу смысла с тобой спорить. Ты уже показал себя на форуме
bes, мой полный ответ был
здесь. По сути на этом тема должна быть исчерпана.
Даже если в функцию передается
объект с параметрами, то:
1. либо он чистый [new Object()]
2. либо, в большинстве случаев его следует интерпретировать как чистый. Например:
foo({bar: 1});
foo({bar: 1}); // какой смысл от того, что это другой объект, если это всего лишь "объект с параметрами"?
т.е. просто глупо тут разницу показывать или нет смысла хранить в массиве ссылки на объекты (если реализация через массивы)
На все
негодования кукарекония
krutoy, опять-таки, мой ответ был по
ссылке выше - смотрите исходники lowdash, там все есть. Для тех, кто кукарекает и не читает ссылки, а в частности
krutoy, напишу примерный код того, как эта функция выглядит в lowdash:
var fn = function() {
console.log(1);
};
var foo = memoize(fn);
foo({a:1}); // 1
foo({a:1}); //
var bar = memoize(fn, function() {
return Date.now();
});
bar({a:1}); // 1
bar({a:1}); // 1
/**
* @param {Function} fn
* @param {Function} [identify]
*/
function memoize(fn, identify) {
var cache = {};
var getKey = identify || JSON.stringify;
return function() {
var key = getKey(arguments);
if (!cache.hasOwnProperty(key)) {
cache[key] = fn.apply(this, arguments);
}
return cache[key];
};
}