Как мне избежать использования этих функций до того, как они будут определены, когда я кодирую циклическую проверку в Javascript? - PullRequest
0 голосов
/ 29 октября 2018

Я постоянно нахожусь в этих циклах, где я работаю через пользовательский ввод, чтобы убедиться, что я получаю то, что ожидалось. Тем не менее, я не знаю, как это сделать без вызова функции до ее определения, что дает мне ошибку eslint: no-use-before-define .

function tryAgain(){
  alertBadInput();
  getInput();
}

function getInput(){
  var input = askForInput();
  if (input === 'bad') {
    tryAgain();
    return;
  }
  processInput(input);
}

Независимо от того, в каком порядке я определяю эти две функции, одна из них будет вызывать другую, прежде чем она будет определена.

Это кажется синтаксически допустимым, но, учитывая ошибку eslint, какой другой шаблон я могу использовать, если я надеюсь избежать этой ошибки?

1 Ответ

0 голосов
/ 29 октября 2018

Хотя две функции могут вызывать друг друга, возможно, было бы лучше использовать цикл while для ясности (и для этого он нужен) и для соответствия стандарту кодирования, избегая ошибок в целом, например, так :

function getInput() {
    var no_valid_input = true;
    var input = null;
    while (no_valid_input) {
        input = askForInput();
        if (input !== 'bad') {
            no_valid_input = false;
        } else {
            alertBadInput();
        }
    }
    processInput();
}

Рабочий пример:

function processInput() {
    return alert('Yep, processing...');
}
function alertBadInput() {
    return alert('Nope');
}
function askForInput() {
    return prompt('What?');
}

function getInput() {
    var no_valid_input = true;
    var input = null;
    while (no_valid_input) {
        input = askForInput();
        if (input !== 'bad') {
            no_valid_input = false;
        } else {
            alertBadInput();
        }
    }
    processInput();
}

getInput();
...