私はDavid Flanaganの「Javascript:The Definitive Guide」を見ています。D. Flanaganの "JS:Definitive Guide"にmemoize関数が引数を必要とするのはなぜですか?length?
彼はその引数としての機能を受け入れ、高階関数、memoize()
を示しており、機能のメモ化バージョンを返しパラグラフ8.8.4で
:あり説明で
//Return a memoized version of f.
// It only works if arguments to f all have distinct string representations.
function memoize(f) {
var cache = {}; // Value cache stored in the closure.
return function() {
// Create a string version of the arguments to use as a cache key.
var key = arguments.length + Array.prototype.join.call(arguments,",");
if (key in cache) return cache[key];
else return cache[key] = f.apply(this, arguments);
}
}
は:「返さ関数は、その引数配列を文字列 "に変換します。
引数が必要な場合は、引数配列を文字列に変換するだけでなく、arguments.length
をArray.prototype.join.call(arguments, ",")
に連結するのはなぜですか?そうでなければこの二呼び出しが同じキーで格納されるので
コールのキャッシュにアクセスするために後で使用されるためです。異なる数のパラメータでメソッドを呼び出すと、違いがあります –