You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数返回值传入其他函数返回undefined 算术测验APP答题判错问题

问题原因

  1. 你用const在全局声明的correctAnswer只会在脚本首次加载时计算一次,const声明的常量无法二次赋值,所以这个值永远是第一道题的计算结果,后续更换题目后也不会更新,自然会出现后续答对也判错的问题。
  2. 你把答案计算逻辑放到checkAnswer中会报错的原因是:checkAnswer是用户提交答案时触发的执行逻辑,此时调用generateQuestion()会直接生成新题目覆盖页面上用户正在作答的旧题,用新题的答案和用户针对旧题输入的答案比对自然无法匹配,逻辑完全错位。

解决方案

调整逻辑:每次生成新题时同步计算并存储当前题的正确答案,提交作答时直接调用预存的答案比对,比对完成后再生成下一道题。
修改后的代码示例如下:

  1. 先声明可变的全局变量存储当前题的正确答案,替换原全局的correctAnswer声明:
let currentCorrectAnswer;
let score = 0; // 确保你的score变量也有正确的全局声明
  1. 修改generateQuestion函数,生成题目的同时计算并存储答案:
function generateQuestion() {
  const newQuestion = quizzes[Math.trunc(Math.random() * quizzes.length)];
  question.textContent = newQuestion;
  // 生成题目时直接计算正确答案存入全局变量
  currentCorrectAnswer = eval(newQuestion);
  return newQuestion;
}
  1. 页面初始化时调用一次generateQuestion()生成第一道题,不要在全局执行答案计算逻辑。
  2. 修改checkAnswer函数,直接调用预存的答案比对,判定完成后再生成下一题:
function checkAnswer() {
  const userInput = Number(answer.value);
  if (currentCorrectAnswer === userInput) {
    feedback.textContent = "Correct!";
    score++;
    document.querySelector(".score").textContent = score;
  } else {
    feedback.textContent = "Wrong!";
  }
  answer.value = "";
  // 判定完成后再生成下一道题
  generateQuestion();
}

注意事项

如果你的quizzes数组内容完全是你自己预设的固定算术题,用eval没有风险;如果后续涉及用户可输入的表达式内容,建议替换eval为手动实现的算术表达式解析逻辑,避免代码注入风险。

内容的提问来源于stack exchange,提问作者Adesanya Adeniyi Marvellous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:48:01