【发布时间】:2017-03-01 04:46:10
【问题描述】:
我知道 memoize 的目的是缓存值,这样代码就可以更快地运行,而不必每次都重新计算相同的答案。我的问题源于返回一个函数(我认为)。 google chrome 调试器在这里对我来说不是那么有用,因为每次我尝试运行这个 memoize 函数时,它只是从 argus 变量(我相信在第 4 行)一直到分号。此外,result 总是返回一个空对象,而不是在 result 中存储一个值。
我先定义一个函数:
function add(a,b){
return a+b;
}
这是我对 memoize 功能的尝试:
_.memoize = function(func) {
var result = {};
var flag = 0;
var argus = Array.prototype.slice.call(arguments)
return function() {
if(result[key] === arguments){
flag = 1
}
else if(flag = 0){
result[argus] = func.apply(this, argus);
}
return result[argus];
};
};
我会通过执行 _.memoize(add(2,5)) 来调用 memoize,但结果不会存储在结果对象中。
我是否接近让这个 memoize 功能正常工作?你们可以在这里提供的任何指导将不胜感激。
【问题讨论】:
-
我在下面添加了一个答案,但这里有两个明显的错误:(1)您使用的
key变量未在任何地方定义或赋值(2)您有if(flag = 0)。=运算符用于赋值,而不是比较。 -
谢谢,这让我明白了。我真的挂了。