【发布时间】:2020-12-16 20:36:40
【问题描述】:
我创建了一个缓存(记忆)函数,它以另一个函数作为参数
以下是正在缓存的函数。该功能使用一个工人。这里的问题是,如果
var hello = GetSubRegion(1233) ,那么 hello 是未定义的,因为 onmessage 中的函数返回一个值,而不是父 GetSubRegion 函数。
function GetSubRegion(selectedMainRegion){
if (typeof(subRegWorker) != "undefined") {
subRegWorker.terminate();
}
subRegWorker = new Worker("subRegWorker.js");
subRegWorker.onmessage = function(e) {
var workData = e.data;
jQuery("#_sub_region").html(workData);
subRegWorker.terminate();
return workData;
}
var result = subRegWorker.postMessage(selectedMainRegion);
return result;
}
以下是缓存功能。由于上述问题,
let result = fun(n) 没有返回值,因此没有缓存任何内容。
function memoizer(fun){
let cache = {}
return function (n){
if (cache[n] != undefined ) {
return cache[n]
} else {
console.log(n);
let result = fun(n)
cache[n] = result
return result
}
}
}
如何解决?
以下是我调用缓存函数的方式。
jQuery("#_main_region").change(function() {
var getCacheSub = memoizer(GetSubRegion);
var inputMainRegion = jQuery('#_main_region').find(":selected").val();
getCacheSub(inputMainRegion);
});
【问题讨论】:
标签: javascript jquery caching return memoization