答题正确时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
相关产品推荐
相关产品推荐

