Javascript 将参数引入另一个函数
一个参数——另一个函数——并返回该函数的“记忆”版本。函数的“记忆”版本缓存并返回其调用的结果,以便在使用相同的输入再次调用时,它不会运行计算,而是从缓存返回结果。请注意,以前的结果应该可以按任何顺序检索,而无需重新计算Javascript 将参数引入另一个函数,javascript,Javascript,一个参数——另一个函数——并返回该函数的“记忆”版本。函数的“记忆”版本缓存并返回其调用的结果,以便在使用相同的输入再次调用时,它不会运行计算,而是从缓存返回结果。请注意,以前的结果应该可以按任何顺序检索,而无需重新计算 foo = function (x) { console.log("calculating!"); return x + 5; } var memoizedFoo = memoize(foo); memoizedFoo(5); // calculating! // 10
foo = function (x) {
console.log("calculating!");
return x + 5;
}
var memoizedFoo = memoize(foo);
memoizedFoo(5);
// calculating!
// 10
memoizedFoo(5);
// 10 (notice how 'calculating!' is not printed this time)
memoizedFoo(10);
// calculating!
// 15
我想问题是如何编写
备忘录
。您可以将给定参数的第一个结果存储在一个容器中,并返回一个函数,如果可以,该函数将使用该容器
下面是一个ES5示例,它仅适用于可以有效转换为字符串的参数值,如字符串、数字、布尔值:
函数记忆(f){
//存储此函数的结果
var values=Object.create(null);
返回函数(arg){
//已经有了吗?
if(Object.hasOwnProperty.call(values,arg)){
//是的,退掉它
返回值[arg];
}
//不,拿着它,记住它,然后归还它
返回值[arg]=f(arg);
};
}
var foo=函数(x){
console.log(“计算!”);
返回x+5;
};
var memoizedFoo=memoize(foo);
console.log(memoizedFoo(5));
//算计!
// 10
console.log(memoizedFoo(5));
// 10
console.log(memoizedFoo(10));
//算计!
//15
我想问题是如何编写备忘录
。您可以将给定参数的第一个结果存储在一个容器中,并返回一个函数,如果可以,该函数将使用该容器
下面是一个ES5示例,它仅适用于可以有效转换为字符串的参数值,如字符串、数字、布尔值:
函数记忆(f){
//存储此函数的结果
var values=Object.create(null);
返回函数(arg){
//已经有了吗?
if(Object.hasOwnProperty.call(values,arg)){
//是的,退掉它
返回值[arg];
}
//不,拿着它,记住它,然后归还它
返回值[arg]=f(arg);
};
}
var foo=函数(x){
console.log(“计算!”);
返回x+5;
};
var memoizedFoo=memoize(foo);
console.log(memoizedFoo(5));
//算计!
// 10
console.log(memoizedFoo(5));
// 10
console.log(memoizedFoo(10));
//算计!
//15
简单的问题是什么?@T.J.Crowder,为什么会出错,我有这个问题要解决,但没有得到如何得到工作的答案,关键是你没有问过问题。简单的问题是什么?@T.J.Crowder,为什么会出错,我有这个问题要解决,但没有得到如何得到工作的答案,关键是你没有问过问题。