将pased函数的参数存储在我的内存函数中
store arguments of a function that is pased in my memory function
我正试图让一个函数保存通过它传递的结果和数据输入。其思想是,它不应该使用相同的参数运行最近传递的函数,而是返回旧的结果。但是,如果参数发生变化,它将运行相同的函数。
我认为即使在测试时,该功能也在运行
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;
};
};
代码有几个问题:
test
函数中in
的使用不正确。in
用于测试对象中是否存在属性。test
函数需要比较对象是否相等。请改用JSON.stringify()
来比较对象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
相关文章:
- 可以Resharper在我的javascript函数声明中添加分号
- 为什么我的JavaScript堆栈排序函数不起作用
- 加速我的复杂函数绘图仪(canvas+javascript)
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 使用JAVASCRIPT转换货币.可以't通过我的函数设置转换后的输入文本字段的值
- 为什么我的控制器没有启动函数.js脚本
- 为什么我的函数没有被调用呢
- 由于某种原因,我的JavaScript函数无法工作
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 我应该如何声明我的自调用函数
- 为什么我的函数没有返回准确的计数
- 为什么我的回调函数没有运行
- 为什么我的jQuery点击函数没有触发
- 我的函数返回“未定义”
- 为什么我的JavaScript函数没有返回选中的数组值
- 用我的函数jquery给出数据/参数
- 为什么我的javascript地理编码函数返回空白结果
- 从未达到我的函数调用-ReactJs 0.12.0
- 我的函数不会返回要保存在数组中的对象
- 我的徽章;如果“;为什么没有调用关联的函数