Правильный ли это возврат к моей исходной функции приглашения? (JavaScript)

1

У меня есть очень простая функция Javascript, основанная на переменной, взятой из подсказки. Если ввод в приглашении не является ни числом, ни строкой, я хочу, чтобы он автоматически возвращался к приглашению, чтобы пользователь мог снова записать этот ввод. Правильно ли этот код?

var a = prompt("please enter a number");
function tys() {
    if (typeof a == 'string') {
        document.write("You exited.");
    } else if (isNaN(a)) {
        document.write(a-10);
    } else {
        document.write("Input invalid. Please write another input.");
        tys();
    }
}
  • 0
    Делайте это, пока a ложно ... и вам также нужно будет вызывать tys после того, как он определен ... () ... так что ... do tys (); пока (! а);
  • 0
    Вот как вы работаете в функциональном программировании; Вы использовали хвост-рекурсивный вызов там, что важно. Что это означает, это вызов, tys(); не является подвыражением. В JS уместно использовать такой цикл, на самом деле он становится немного функциональным, когда вы уплотняете логику, например let tys = a => typeof a === 'string' ? document.write('you exited') : isNaN(a) ? document.write(a-10) : document.write('input invalid, please write another') || tys(); ... Я должен добавить, что если вам нравится этот стиль программирования, попробуйте Haskell, F #, Rust, Scheme и т.д ...
Показать ещё 1 комментарий
Теги:
loops
if-statement
prompt

2 ответа

0

Тип кода, который вы ищете, называется циклом while, потому что он будет продолжать выполнять код, пока утверждение истинно.

В вашем случае вы хотите вернуться к пользовательскому вводу, если что-то не выполняется.

let canContinue = false;

while (canContinue === false) {
    const input = prompt("please enter input: ");
    if (input === "hello") canContinue = false;
}

// I will be hit once the user inputs hello"

В приведенном выше случае мы можем видеть, что мы будем продолжать запрашивать ввод, если пользователь не вводит значение, которое соответствует "привет", но если они это сделают, то оно будет продолжаться вне цикла while.

Ваше текущее решение

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

Надеюсь это поможет.

0

do tys(); while(!a); в do tys(); while(!a); вызовет функцию tys хотя бы один раз, но несколько раз, если a является ложным.

Это должно делать то, что вам нужно, вы можете проверить a на допустимое значение, и в этом случае вы должны изменить a на true только после разбора.

Имейте в виду, что будет значением, введенным пользователем или неопределенным, если ничего не было введено или отменено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню