我正在制作一个页面,可以计算并显示从1到100的所有素数。实际的素数计算工作正常,但当我尝试通过JQuery追加测试为素数的数字时,它会改为追加它每次都是101号。
JS代码:
function primeFinder() {
var testNum = 1;
var failures = 0;
var checkNum = testNum -1;
while(testNum <= 100) {
while(checkNum > 1) {
if ((testNum/checkNum)%1 != 0) {
failures += 1;
checkNum -= 1;
}
else {
checkNum -= 1;
}
}
if (failures == testNum - 2) {
$(document).ready(function(){
$("#results").append(testNum + "<br>")
})
failures = 0;
testNum +=1;
checkNum = testNum -1;
}
else {
failures = 0;
testNum +=1;
checkNum = testNum -1;
}
}
}
它正确地附加它,它只是附加不正确的值,原因我无法弄清楚。如果我将变量更改为文本,那么它没有问题。它只是它无法正确处理的变量。
答案 0 :(得分:2)
根据我的评论:您在每个循环中附加testNum
,但仅在文档准备好之后。这会导致附加testNum
的最终值,因为循环很可能在文档准备好之前执行了。
要绕过这个问题,只需将整个函数包装在DOM ready事件中,你就应该好好去。这是一个基于您提供的代码的概念验证片段。
$(document).ready(function() {
// You can move this function declaration outside DOM ready, doesn't matter
var primeFinder = function() {
var testNum = 1;
var failures = 0;
var checkNum = testNum - 1;
while (testNum <= 100) {
while (checkNum > 1) {
if ((testNum / checkNum) % 1 != 0) {
failures += 1;
// console.log(checkNum + " ~~~ " + failures);
checkNum -= 1;
} else {
checkNum -= 1;
}
}
if (failures == testNum - 2) {
console.log(testNum + " is prime!");
$("#results").append(testNum + "<br>")
failures = 0;
testNum += 1;
checkNum = testNum - 1;
} else {
// console.log(testNum + " is NOT prime!");
failures = 0;
testNum += 1;
checkNum = testNum - 1;
}
}
}
// But you must execute this function within DOM ready
primeFinder();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="results"></div>