Javascript 为什么这个代码打印错误的素数?

Javascript 为什么这个代码打印错误的素数?,javascript,function,loops,Javascript,Function,Loops,我认为问题在for循环中。因为我在两个函数的循环中使用了相同的“j”来迭代 我想打印1-100之间的所有素数。 我认为所有代码都很好。但它一直显示质数以外的输出 我自己找不到答案。没有其他地方有书面答复。请帮帮我。我想了解这个问题 var n=100; var prime1=新数组(); //产生高达97的素数 函数素数(){ 对于(j=1;j使用“let”正确声明“j” function primeNumber() { for (let j = 1; j <= n; j++) {

我认为问题在for循环中。因为我在两个函数的循环中使用了相同的“j”来迭代 我想打印1-100之间的所有素数。 我认为所有代码都很好。但它一直显示质数以外的输出

我自己找不到答案。没有其他地方有书面答复。请帮帮我。我想了解这个问题

var n=100;
var prime1=新数组();
//产生高达97的素数
函数素数(){
对于(j=1;j使用“let”正确声明“j”

function primeNumber() {
  for (let j = 1; j <= n; j++) {
    if (countRemainder(j) == 2) {
      prime1.push(j);

    }
  }
}
函数primeNumber(){

对于(让j=1;j这个问题确实发生了,因为您在两个
for
循环中使用了相同的变量

当您声明一个变量,如
j=0;
而不是
var j=0;
时,该变量将被添加到全局范围(而不是您所在的范围,以便其他所有范围都可以查看和更改该变量)

如果脚本正在中运行,则这将抛出一个错误,而不是将变量添加到全局范围

因此,只需在每个
j
声明之前添加
var

var n=100;
var prime1=新数组();
//产生高达97的素数
函数素数(){
对于(var j=1;j试试这个

var n=100;
var prime1=新数组();
//产生高达97的素数
函数素数(){

对于(var j=1;j您的
j
的范围与您认为的不同。我建议始终在@TiiJ7中运行您的代码。我不知道严格模式是什么。感谢您向我推荐这一宝贵资源。我记得一位老师告诉她的学生:要写一本书,您需要写很多页。要写一页,您需要写很多段落s、 写一个段落你需要知道如何写一个句子。写一个句子,你需要知道语法。要知道语法,你需要学习。有时学生愿意写一本书而不学习语法。原则上这很好,但大多数情况下效果不好。@SC1000考虑得太周到了。我吸取了教训。试试看使用let声明避免所有函数作用域/自动声明作用域issue@vun没有迹象表明OP正在使用ES6,因此我不想添加任何可能不兼容的功能。此外,
var
在这种情况下也可以,因为脚本中没有任何异步操作。