gpt4 book ai didi

javascript - 存储在我的内存函数中传递的函数的参数

转载 作者:行者123 更新时间:2023-11-28 07:37:06 26 4
gpt4 key购买 nike

我试图让一个函数保存通过它传递的数据的结果和输入。这个想法是,它不应该运行最近传递的具有相同参数的函数,而应该返回旧的结果。但如果参数发生变化,它将运行相同的函数。

我认为即使在测试时该函数也在运行

memoize = function(func) {
var result;
var old_arg={};
var test = function(x, y){
if(!(y in x)){return true;}
else{return false;}
};

return function (){
old_arg.arg= arguments;
if (test(old_arg, func)) {
result = func.apply(this, arguments);
old_arg.result = result;
}
else{result = old_arg.result;}
return result;
};
};

最佳答案

代码有几个问题:

  1. test 函数中的 in 使用不正确。 in 用于测试某个属性是否存在于对象中。 test 函数需要比较对象是否相等。使用 JSON.stringify() 来比较对象。
  2. old_arg.arg=arguments; 放置不正确。这会覆盖参数的旧值并将新参数与新参数进行比较。

这是正确执行此操作的方法之一:

memoize = function(func) {
var result;
var old_arg={arg:{}, result:{}};
var compareObjects = function(x, y){
return (JSON.stringify(x) === JSON.stringify(y));
};

return function (){
if (!compareObjects(old_arg.arg, arguments)) {
result = func.apply(this, arguments);
old_arg.result = result;
console.log("new");
}
else{result = old_arg.result;console.log("old");}

old_arg.arg= arguments;
return result;
};
};

然后使用以下方法进行测试:

a = function(a) {
return a + 10;
}

a = memoize(a);

console.log(a(10)); //op: new 20
console.log(a(10)); //op: old 20
console.log(a(12)); //op: new 22

关于javascript - 存储在我的内存函数中传递的函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com