Answer
t.me/js_testОтвет:
Calculated! 20 From cache! 20 From cache! 20
Объяснение:
Функция add
является функцией запоминателем. С помощью запоминания мы можем кэшировать результаты функции, чтобы ускорить ее выполнение. В этом случае мы создаем объект cache
, в котором хранятся ранее возвращенные значения.
Если мы снова вызываем функцию addFunction
с тем же аргументом, она сначала проверяет, получило ли оно уже это значение в своем кеше. В этом случае будет возвращено значение кэша, что экономит время выполнения. Иначе, если он не кэшируется, он вычислит значение и сохранит его после.
Мы вызываем функцию addFunction
три раза с одним и тем же значением: при первом вызове значение функции, когда num
равно 10
, еще не кэшировано. Условие оператора if num in cache
возвращает false
, и выполняется блок else: Calculated! 20
регистрируется, и значение результата добавляется в объект кеша. cache
теперь выглядит как {10: 20}
.
Во второй раз объект cache
содержит значение, возвращаемое для 10
. Условие оператора if num in cache
возвращает true
, а 'From cache! 20'
выводится в лог.
В третий раз мы передаем 5 * 2
в функцию, которая оценивается как 10
. Объект cache
содержит значение, возвращаемое для 10
. Условие оператора if num in cache
возвращает true
, а 'From cache! 20'
регистрируется.
Код для проверки:
const add = () => { const cache = {}; return num => { if (num in cache) { return `From cache! ${cache[num]}`; } else { const result = num + 10; cache[num] = result; return `Calculated! ${result}`; } }; }; const addFunction = add(); console.log(addFunction(10)); console.log(addFunction(10)); console.log(addFunction(5 * 2));