var quiz = [
  ["What is Superman's real name?", "Clarke Kent"],
  ["What is Wonderwoman's real name?", "Dianna Prince"],
  ["What is Batman's real name?", "Bruce Wayne"]
];

var score = 0 // initialize score
play(quiz);

function play(quiz) {
  for (var i = 0, question, answer, max = quiz.length; i < max; i++) {
    question = quiz[i][0];
    answer = ask(question);
    check(answer);
  } // end of main game loop  gameOver();
}
}

function ask(question) {
  return prompt(question);
}

Это где я получаю сообщение об ошибке из журнала консоли

Uncaught ReferenceError: i is not defined
      at check (VM13 novice.js:26)
      at play (VM13 novice.js:16)
      at VM13 novice.js:5 
function check(answer) {
  if (answer === quiz[i][1]) {
    alert("Correct!");
    score++;
  } else {
    alert("Wrong!");
  }
}
0
Kristine2018

1 ответ

Проблема в том, что в области действия вашей функции check нет переменной i . Если вы хотите сравнить ответ, вы должны знать правильную позицию в массиве.

Один из вариантов - передать i в check , что решит вашу непосредственную проблему. Однако было бы даже лучше, если бы вы вместо этого ответили ожидаемым ответом - так check не нужно знать, где хранятся вопросы и ответы. Таким образом, в будущем вы можете представлять данные по-другому с меньшим количеством необходимых изменений:

var quiz = [
  ["What is Superman's real name?", "Clarke Kent"],
  ["What is Wonderwoman's real name?", "Dianna Prince"],
  ["What is Batman's real name?", "Bruce Wayne"]
];

var score = 0 // initialize score
play(quiz);

function play(quiz) {
  for (var i = 0, question, answer, max = quiz.length; i < max; i++) {
    question = quiz[i][0];
    //also extract the answer to the question
    expectedAnswer = quiz[i][1];
    userAnswer = ask(question);
    check(userAnswer, expectedAnswer);
  } // end of main game loop  gameOver();
}


function ask(question) {
  return prompt(question);
}

//the function now takes both the user and the expected answers to check them
function check(userAnswer, expectedAnswer) {
  if (userAnswer === expectedAnswer) {
    alert("Correct!");
    score++;
  } else {
    alert("Wrong!");
  }
}
58578097