почему console.log(res) срабатывает 5 раз подряд

если изменит имена в местах * или ** срабатывает один раз

пытался разобраться мозг попал в рекурсию

let fact = function f(n){
  return (n!== 1)? fact(n-1) * n : n //*
}
function decorRes(func){
  return function(a) {
    let res = func(a)
    console.log(res);
    return res
  }
}

fact = decorRes(fact) //**

fact(5)

Ответы (1 шт):

Автор решения: Ghost

Потому что вы переопределяете переменную fact, и на момент вызова она содержит decorRes

const fact = function f(n){
  return (n!== 1)? fact(n-1) * n : n //*
}
function decorRes(func){
  return function(a) {
    const res = func(a)
    console.log(res);
    return res
  }
}

const bar = decorRes(fact) //**

bar(5)

или

let fact = function f(n){
  // вызываем функцию
  // а не переменную содержащую функцию
  return (n!== 1)? f(n-1) * n : n  
}
function decorRes(func){
  return function(a) {
    let res = func(a)
    console.log(res);
    return res
  }
}

fact = decorRes(fact) //**

fact(5)
→ Ссылка