Есть рекурсивная функция
function fac(num) {
if (num == 1) {
return num
} else {
return num * fac(num - 1)
}
}
И есть декоратор которая выводит результат в консоль
function logResultDecorator(func) {
return function() {
let result = func.apply(this, arguments)
console.log('Результат функции: ', result)
}
}
Почему когда я передаю декоратору обычную функцию (Function Declaration), в результате получаю 1 и несколько раз NaN
function fac(num) {
if (num == 1) {
return num
} else {
return num * fac(num - 1)
}
}
function logResultDecorator(func) {
return function() {
let result = func.apply(this, arguments)
console.log('Результат функции: ', result)
}
}
fac = logResultDecorator(fac)
fac(5)
/* Результат функции: 1
Результат функции: NaN
Результат функции: NaN
Результат функции: NaN
Результат функции: NaN */
Но когда передаю декоратору Function Expression, все работает корректно
let fuc = function fac(num) {
if (num == 1) {
return num
} else {
return num * fac(num - 1)
}
}
function logResultDecorator(func) {
return function() {
let result = func.apply(this, arguments)
console.log('Результат функции: ', result)
}
}
fuc = logResultDecorator(fuc)
fuc(5)
// Результат функции: 120
Почему функцию нужно присваивать переменной? Я не понимаю