Проблема в том, что вы запоминаете функцию каждый раз, когда отвечаете на нажатие кнопки. У вас есть
$(".btn").on("click", function(){
//...
var loadData = memoize(getDataById);
... loadData(input) ...
});
function memoize(fn){
var cache = {}
return function(url){
if(cache[url]!=undefined){
console.log("loading from cache");
return cache[url];
}else{
console.log("loading from server");
fn(url,cache)
return cache[url];
}
}
}
Поэтому, когда вы вызываете memoize
, он создает новое закрытие с доступом к новому cache
и возвращает его. Попробуйте создать запомненное loadData
снаружи:
var loadData = memoize(getDataById);
$(".btn").on("click", function(){
//...
... loadData(input) ...
});
Таким образом, это то же самое закрытие с тем же кешем, который вызывается несколько раз.