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