Показать сообщение отдельно
  #1 (permalink)  
Старый 06.10.2022, 22:38
Новичок на форуме
Отправить личное сообщение для Amonecks Посмотреть профиль Найти все сообщения от Amonecks
 
Регистрация: 01.01.2022
Сообщений: 6

Декоратор с кешированием
Доброго всем времени суток. Есть пара вопросов касательно механики декоратора. Допустим у нас есть:
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;

Тоесть изначальной функции?
Ответить с цитированием