Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Декоратор с кешированием (https://javascript.ru/forum/misc/84520-dekorator-s-keshirovaniem.html)

Amonecks 06.10.2022 22:38

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

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

Amonecks 06.10.2022 23:13

Тоесть если я правильно понял
let rusult = func(x);

Вызывает функцию, не измененную, а ссылается на ту что была инициализирована изначально?

рони 07.10.2022 00:00

Цитата:

Сообщение от Amonecks
ссылается на ту что была инициализирована изначально?

:yes:


Часовой пояс GMT +3, время: 04:48.