Почему «return» необходим перед randomHull () в операторе else? - PullRequest
1 голос
/ 24 апреля 2020

Цель этой функции - вернуть значение между 3 и 6. Я знаю, что есть более простой способ сделать это, но я просто пытаюсь понять, как / почему эта опция работает.

Ниже Функция работает, но только если вы используете return в операторе else. Если вы не используете «return randomHull ()» и вместо этого просто используете «randomHull ()», он вернет неопределенное значение, если первая попытка находится за пределами диапазона.

Мое первоначальное понимание состояло в том, что возвращение не нужно, поскольку значение будет сохранено только в том случае, если оператор if истинен, в противном случае он просто снова запустит randomHull (), пока не пройдет через оператор if и не вернет значение в диапазон.

Почему требуется "возврат" перед randomHull () в операторе else?

const randomHull = () => {
     let alienHull = Math.ceil(Math.random() * 6);
     if (alienHull >= 3) {
        return alienHull;
     } else {
        return randomHull();
     }

}

console.log(randomHull());

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Это рекурсивная функция.

https://en.wikipedia.org/wiki/Recursion_ (computer_science)

Работает потому, что снова вызывает себя, пока не выполнит условие в условии if. Каждое выполнение будет на шаг ближе к >= 3 и в конечном итоге попадет в кейс в if.

0 голосов
/ 24 апреля 2020

Скажите, что он находит совпадение со второй попытки.

Первая попытка попадает в ветвь else, затем вызывает функцию randomHull.

Возвращаемое значение передается обратно вызывающей функции (первый вызов randomHull). Тогда с этим ничего не будет сделано (оно не возвращается, потому что вы вынули return, оно не сохраняется в переменной, потому что вы тоже этого не делаете, и т. Д. c).

Первый вызов randomHull содержит. Он нажимает }, чтобы завершить блок else. Затем он нажимает }, чтобы завершить функцию. Поскольку он достиг конца функции без оператора return, он возвращает undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...