Я застрял на этом пару часов. Я проверил рекурсивную функцию в JavaScript, возвращенную из оператора if, но заканчивается только конец выполнения функции и значение, которое я пытался вернуть, не было присвоено переменной. Это console.log
как undefined.
Вот мой код, это просто, поскольку я изучаю рекурсивные функции:
function foo(i) {
// if i equals 5, return out of function
if (i === 5) {
console.log("We are now at 5");
return "Done";
} else {
console.log(i);
foo(++i);
}
}
let test = foo(0);
console.log(test);
Я просто не понимаю, почему он не возвращает "Готово" к переменной, но если я поставлю оператор return за пределами if/else, он вернется, как я предполагаю. Я пробовал другие обычные, простые, не рекурсивные функции, и они возвращаются в пределах блока if.
Проблема заключается не в возврате "Готово", а в рекурсивном вызове. Вы просто вызываете его, а не возвращаете, поэтому возвращаемое значение из рекурсивного вызова не возвращается "вверх". Просто return
его, и вам все будет в порядке:
function foo(i) {
// if i equals 5, return out of function
if (i === 5) {
console.log("We are now at 5");
return "Done";
} else {
console.log(i);
return foo(++i); // Here!
}
}