Как заменить ключевые слова "var" в этом коде на "let" и "const"? - PullRequest
1 голос
/ 09 апреля 2019

Если я заменяю ключевые слова "var" на "let" или "const", я получаю ошибку userChoice is notfined error.

Я уже пытался заменить все на "let" или "const"».Я также поместил userChoice в функцию и вызывал ее всякий раз, когда мне это было нужно.Я также попытался поместить весь цикл while в функцию.Программа отлично работает с "var".

Самое дальнее, что я получил с "let" и "const", это / Как только я попытался поместить его в цикл while, он перестал работать:

const arrayList = [];
let userChoice = prompt('What would you like to do?');
// Array list is empty array
if (userChoice === "new") {
    let newTodo = prompt('Enter a new todo');
    arrayList.push(newTodo);
} else if (userChoice === "list") {
    console.log(arrayList);
}

Рабочий код:

var arrayList = [];
var userChoice = prompt('What would you like to do?');
// Array list is empty array
while (userChoice !== "quit") {
    if (userChoice === "new") {
        var newTodo = prompt('Enter a new todo');
        arrayList.push(newTodo);
    } else if (userChoice === "list") {
        console.log(arrayList);
    }
    var userChoice = prompt('What would you like to do?');
}

Я ожидаю, что эта программа будет постоянно запрашивать, если вы не скажете "выйти".Вы вводите «new», чтобы добавить новый todo, и «list», чтобы вывести список всех todos.

1 Ответ

2 голосов
/ 09 апреля 2019

Проблема в том, что этот код объявляет userChoice дважды, второй var на нем не нужен:

var arrayList = [];
var userChoice = prompt('What would you like to do?');
// Array list is empty array
while (userChoice !== "quit") {
    if (userChoice === "new") {
        var newTodo = prompt('Enter a new todo');
        arrayList.push(newTodo);
    } else if (userChoice === "list") {
        console.log(arrayList);
    }
    var userChoice = prompt('What would you like to do?');
//  ^^^---------------------------------------------------- here
}

С var это не имело значения, потому что var имеет область действия функции (или глобальную область, если используется вне функции), и множественные объявления игнорируются, но это имеет значение с let, поскольку let равно block-scoped , поэтому объявление нового userChoice внутри блока затеняет внешний. (Множественные объявления с let являются ошибкой в ​​одной и той же области видимости, поскольку это не имеет смысла, и допускать это может привести к сложным вещам.)

Просто удалите эту вторую var и замените остальные var на let (или вы можете использовать const для arrayList и newTodo, если только код, который не показан, назначает новый массив для arrayList позже):

const arrayList = []; // Or let
let userChoice = prompt('What would you like to do?');
// Array list is empty array
while (userChoice !== "quit") {
    if (userChoice === "new") {
        const newTodo = prompt('Enter a new todo'); // Or let if you prefer
        arrayList.push(newTodo);
    } else if (userChoice === "list") {
        console.log(arrayList);
    }
    userChoice = prompt('What would you like to do?');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...