_ .memoize = function(func) {
var hash = {};
return function() {
var arg = JSON.stringify(arguments);
if (hash[arg] === undefined) {
hash[arg] = func.apply(this, arguments);
}
return hash[arg];
};
};
你好,
我正在尝试实现memoize下划线功能。我对JSON.stringify
有疑问。
在if statement
中,arg
检查hash
中是否已存在JSON.stringify
。为什么使用arg
可以检查hash
中是否存在输入arguments
。我的意思是如果我们传递JSON.stringify
数组而不使用JSON.stringify
转换它们,那么我们无法检查,因为我们传递的是整个数组。但是,在使用JSON.stringify
时,它会使其正常工作。那么weights
如何才能检查?
答案 0 :(得分:0)
这是因为只有字符串可以用作javascript对象中的键。 例如:
var key = {a:1};
var map = {};
map[key] = 1;
// {'[object Object]': 1}
这将导致每个参数组合在同一个键中为saved
。
使用JSON.stringify
将参数列表转换为唯一字符串,该字符串又可用作唯一对象键。
var key = {a:1};
var map = {};
map[JSON.stringify(key)] = 1;
// {'{"a":1}': 1}
这样,每次使用相同的参数调用函数时,JSON.stringify
将返回相同的唯一字符串,您可以使用它来检查是否已经为该组参数设置了缓存结果,如果所以,返回缓存的值。