Как эта функция JavaScript кеширует свои результаты? - PullRequest
4 голосов
/ 22 мая 2011

Прочитав его несколько раз, я все еще не понимаю, как работает этот пример кода со страницы 76 «Образцы JavaScript» Стояна Стефанова .Я еще не ниндзя.Но для меня это звучит так, как будто он хранит только пустой объект:

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: я прочитал Кэширование результатов возврата функции из «Обучающего расширенного JavaScript» Джона Резига , который является аналогичным упражнением, и яполучить это.Но код здесь другой.

Ответы [ 3 ]

5 голосов
/ 23 мая 2011

Вы ответили на свой вопрос - автор предполагает, что дорогая операция сохранит свой результат в result.

В противном случае кэш будет содержать только пустые объекты, как вы заметили.

2 голосов
/ 23 мая 2011

результаты сохраняются в литерале объекта, который называется «кеш». Что конкретно делает код:

когда myFunc выполняется с параметром, функция сначала проверяет кэш. Если в кэше есть значение для «param», оно возвращает его. Если нет, вы выполняете дорогостоящую операцию, а затем кэшируете результат (с параметром в качестве ключа), поэтому при следующем вызове функции с тем же параметром используется кэш.

1 голос
/ 23 мая 2011

В нем говорится // дорогая операция - вывод состоит в том, что вы реализуете там код, который присваивает переменные в результирующую переменную или присваивает результирующую переменную другому объекту (который является результатом дорогостоящей операции)

...