Если я заменю ключевые слова «var» на «let» или «const», я получу ошибку userChoice is notdefined.
Я уже пробовал заменить все на «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.info(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.info(arrayList);
}
var userChoice = prompt('What would you like to do?');
}
Я ожидаю, что эта программа будет постоянно подсказывать, пока вы не скажете «выход». Вы вводите «новый», чтобы добавить новую задачу, и «список», чтобы перечислить все задачи.
Во предпоследней строке вы повторно объявляете userChoice. Это опечатка?
Проблема в том, что этот код дважды объявляет 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.info(arrayList);
}
var userChoice = prompt('What would you like to do?');
// ^^^---------------------------------------------------- here
}
С var
это не имеет значения, потому что var
имеет область действия функции (или глобальную область, если используется вне функции), а множественные объявления игнорируются, но это имеет значение с let
, потому что let
является блочный, поэтому объявление нового 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.info(arrayList);
}
userChoice = prompt('What would you like to do?');
}
Пожалуйста, покажите нам замены, которые вы пробовали.