javascript 中的记忆以防止重复
Memoization in javascript to prevent repeat
我正在研究记忆,这让我很困惑。我一直在努力研究这个例子,但我忍不住很清楚地理解它。这是我想出来的。
function memoize(x) {
//var x = []
check = function() {
return copycat(x,x)
}
return x;
}
function copycat(input,output) {
if (input === input || output === output) {
return ""
}
}
目标是将这 3 行输入我浏览器的控制台:
function square(x) { alert("computed sq " + x); return x * x; }
msq = memoize(square)
msq(2) + msq(2) + msq(3)
它显示:计算平方 2,然后计算平方 3。它忽略了 msq(2) 的再次出现,但仍然计算 return 结果,即 17。我真的不知道如何接近这个 :( 有什么帮助吗?
这是一个非常基本的记忆功能:
function memoize( fn ) {
var cache = {};
return function( arg ) {
if ( !cache[ arg ] ) {
cache[ arg ] = fn( arg );
}
return cache[ arg ];
}
}
这通过接受一个函数和 returning 一个 new 可以在其位置调用的函数来实现。
当你调用记忆版本时,它会检查是否有保存的结果。如果是,它将 return 它。否则,它将 运行 您的原始函数,保存结果,然后 return 它。
这是一个例子:
function slow( n ) {
for ( var i = 0; i < 1e9; ++i ) {
i;
}
return n * n;
}
var mem = memoize( slow );
mem( 10 );
mem( 10 );
如果您在控制台中使用它,您会注意到第一次调用 mem( 10 )
需要一些时间。下一个(以及所有后续调用)执行得非常快。
我正在研究记忆,这让我很困惑。我一直在努力研究这个例子,但我忍不住很清楚地理解它。这是我想出来的。
function memoize(x) {
//var x = []
check = function() {
return copycat(x,x)
}
return x;
}
function copycat(input,output) {
if (input === input || output === output) {
return ""
}
}
目标是将这 3 行输入我浏览器的控制台:
function square(x) { alert("computed sq " + x); return x * x; }
msq = memoize(square)
msq(2) + msq(2) + msq(3)
它显示:计算平方 2,然后计算平方 3。它忽略了 msq(2) 的再次出现,但仍然计算 return 结果,即 17。我真的不知道如何接近这个 :( 有什么帮助吗?
这是一个非常基本的记忆功能:
function memoize( fn ) {
var cache = {};
return function( arg ) {
if ( !cache[ arg ] ) {
cache[ arg ] = fn( arg );
}
return cache[ arg ];
}
}
这通过接受一个函数和 returning 一个 new 可以在其位置调用的函数来实现。
当你调用记忆版本时,它会检查是否有保存的结果。如果是,它将 return 它。否则,它将 运行 您的原始函数,保存结果,然后 return 它。
这是一个例子:
function slow( n ) {
for ( var i = 0; i < 1e9; ++i ) {
i;
}
return n * n;
}
var mem = memoize( slow );
mem( 10 );
mem( 10 );
如果您在控制台中使用它,您会注意到第一次调用 mem( 10 )
需要一些时间。下一个(以及所有后续调用)执行得非常快。