4

何度か読んだ後でも、 Stoyan Stefanov の「JavaScript パターン」の76 ページにあるこのサンプル コードがどのように機能するかをまだ理解していません。私はまだ忍者ではありません。しかし、私には、空のオブジェクトのみを格納しているように見えます:

var myFunc = function (param) {
  if (!myFunc.cache[param]) {
    var result = {};
    // ... expensive operation ...
    myFunc.cache[param] = result;
  } 
  return myFunc.cache[param];
};
// cache storage
myFunc.cache = {};

その目に見えない「高価な操作」が に保存されていない限り、result何も保持されていません。

結果はどこに保存されますか?

PS: 私はCaching the return results of a function from John Resig's Learning Advanced JavaScriptを読みましたが、これは同様の演習であり、それを取得しました。しかし、ここではコードが異なります。

4

3 に答える 3

5

あなたはあなた自身の質問に答えました - 著者は、高価な操作がその結果を に保存すると想定していresultます。

あなたが指摘したように、それ以外の場合、キャッシュには空のオブジェクトのみが含まれます。

于 2011-05-22T20:02:09.650 に答える
2

結果は「キャッシュ」と呼ばれるオブジェクト リテラルに格納されています。コードが具体的に行っていることは次のとおりです。

myFunc がパラメーターで実行されると、関数は最初にキャッシュをチェックします。キャッシュに「param」の値がある場合は、それを返します。そうでない場合は、コストのかかる操作を実行してから、結果を (キーとして param を使用して) キャッシュするため、次に関数が同じパラメーターで呼び出されるときにキャッシュが使用されます。

于 2011-05-22T20:02:03.433 に答える
1

// 高価な操作 - 推論は、変数を結果変数に割り当てるか、結果変数を別のオブジェクトに設定するコードを実装することです (これは高価な操作の結果です)。

于 2011-05-22T20:01:46.280 に答える