Декоратор с кешированием
Доброго всем времени суток. Есть пара вопросов касательно механики декоратора. Допустим у нас есть:
let cache = new Map(); function slow(x) { return x; } function decorator(func){ return function(x){ if(cache.has(x)){ return cache.get(x); } let result = func(x); cache.set(x, result); return result; } } slow = decorator(slow); Правильно ли я понял, что в момент slow = decorator(slow) - функция переписывается и становится function slow(x){ if(cache.has(x)){ return cache.get(x); } let result = slow(x); cache.set(x, result); return result; } Тоесть let result = slow(x) является рекурсивным вызовом? Но тогда как это работает если по идеи рекурсивный вызов так же вызовет slow и тд. Или же let result = slow(x) в моменте вызова decorator выглядит так: let result = return x; Тоесть изначальной функции? |
Тоесть если я правильно понял
let rusult = func(x); Вызывает функцию, не измененную, а ссылается на ту что была инициализирована изначально? |
Цитата:
|
Часовой пояс GMT +3, время: 04:48. |