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

条件语句中调用函数的第二个参数问题及测验函数实现咨询

问题分析与解决方案

一、你的疑问解答

你提到的条件语句中函数第二个参数的问题,核心是代码里没有正确对应单个问题与单个答案,同时存在几个语法和逻辑错误:

  • prompt(questions)传入了整个问题数组,而非当前要提问的单个问题,会导致弹窗显示整个数组内容,无法实现逐个提问
  • quizAnswer.toUpperCase是方法的引用,缺少调用所需的(),永远无法和答案字符串匹配
  • 直接和answers(整个答案数组)做比较,而不是对应索引的单个答案

二、实现可复用的测验函数

针对你想要创建「只需调整参数即可调用」的遍历式测验函数需求,我帮你修改并完善了代码,修复所有问题的同时实现了预期功能:

// 语义化命名的可复用测验函数
const runQuiz = (questions, answers) => {
  let playerScore = 0;
  
  // 遍历问题数组,同步匹配对应索引的答案
  for (let i = 0; i < questions.length; i++) {
    const currentQuestion = questions[i];
    const correctAnswer = answers[i];
    
    // 获取用户输入,处理用户取消测验的情况
    let quizAnswer = prompt(currentQuestion);
    if (quizAnswer === null) {
      alert('测验已取消');
      break;
    }
    
    // 转换输入为大写后与正确答案比对
    if (quizAnswer.toUpperCase() === correctAnswer) {
      playerScore++;
      alert('That is correct!');
    } else {
      alert(`Oops, wrong answer. The correct one is: ${correctAnswer}`);
    }
  }
  
  // 测验结束后展示最终得分
  alert(`Quiz finished! Your score is ${playerScore}/${questions.length}`);
  return playerScore;
};

// 示例调用:传入不同的问题/答案数组即可复用
const myQuestions = ['What is the capital of Germany?', 'Who is coolest man in Bloominton, IL?'];
const myAnswers = ['BERLIN', 'VANCE'];
runQuiz(myQuestions, myAnswers);

关键改进说明:

  • 用for循环实现数组遍历,确保每个问题精准匹配对应索引的答案
  • 修复toUpperCase()的调用问题,正确统一输入与答案的大小写格式
  • 新增用户取消测验的处理逻辑,避免代码报错
  • 将playerScore放在函数内部,每次调用测验都会重新开始计分(如果需要跨测验保留分数,可将其移到函数外部或作为参数传入)
  • 补充了错误分支的提示信息,以及测验结束后的得分总结
  • 函数名更具语义性,后续更换问题/答案数组直接调用即可

内容的提问来源于stack exchange,提问作者Brandon Robertson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:28:34