条件语句中调用函数的第二个参数问题及测验函数实现咨询
问题分析与解决方案
一、你的疑问解答
你提到的条件语句中函数第二个参数的问题,核心是代码里没有正确对应单个问题与单个答案,同时存在几个语法和逻辑错误:
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
相关产品推荐
相关产品推荐

