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

答题正确时correctAns计数不递增的问题求助

答题正确时correctAns计数不递增的问题求助

我看了你的代码,一眼就发现问题出在正确答题时计数变量k的作用域和初始化方式上,这也是新手写JS时很容易踩的坑。

先看你这段关键的计数逻辑:

if(answer == 'Great Job'){
    let k = 0
    correctAns.innerText = `You got ${k+1} correct`
    return k++
}

这里的k是每次触发这个if分支时才临时声明并初始化为0的局部变量——也就是说,用户每答对一次题,k都会被重置成0,你显示的k+1其实是0+1=1,而k++之后这个变量马上就因为函数执行结束被销毁了,下一次答对时又会重新从0开始,自然计数永远不会往上加。

修复方案:

你需要把k的声明移到事件监听器的外面,让它成为一个能持续保留状态的变量,而不是每次答对都重新初始化:

// 把k放在事件监听器外面,作为外层作用域变量,持久保存计数状态
let k = 0;

qualBtn.addEventListener('click', () => {
    if (textbox.value == '') {
        textbox.value = '';
    } else {
        if (textbox.value.includes('>') || textbox.value.includes('<')) {
            let answer = eval(textbox.value);
            if(answer == true || answer == 'Great Job') {
                answer = 'Great Job';
                textbox.value = answer;
                if(answer == 'Great Job'){
                    k++; // 先递增计数,再更新页面文本
                    correctAns.innerText = `You got ${k} correct`;
                }
            } else {
                textbox.value = 'Try Again';
            }
        } else {
            let answer = eval(textbox.value);
            textbox.value = answer;
        }
    }
});

额外优化建议:

  • 尽量避免使用eval(),它存在安全风险(如果用户输入恶意代码会直接执行),而且可读性差,如果只是处理简单的比较运算,可以考虑自己解析表达式,或者用更安全的方式处理。
  • 你代码里有重复的let answer = 'Great Job',可以去掉重复的声明,直接赋值就行,避免变量重复声明的冗余。
  • 计数逻辑里的return k++完全没必要,这个return会提前结束整个点击事件的回调函数,虽然当前没有后续代码,但养成好习惯,直接递增后更新DOM就好。

这样修改后,每次用户答对题,k都会保留之前的数值并递增,计数就能正常累加啦!

备注:内容来源于stack exchange,提问作者Yassen Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:27:47