Javascript for循环导致异常行为

时间:2018-09-13 20:26:20

标签: javascript

代码示例A

var isPrime = function (num) {
    //for(i = 1; i <= num; i++) {}
    if(num === 2){
      return true;
    }
    return false;
};


var sumPrimesUpTo = function (num) {
    
    for(i = 1; i <= num; i++) {
       console.log(isPrime(i));
    }
    
};

sumPrimesUpTo(5);

因此,我们有一个函数应该检查素数,而第二个函数将素数加起来等于提供的数。运行此命令时,它将输出。

false
true
false
false
false

现在我们有相同的代码示例,但是isPrime中的for循环未注释。

var isPrime = function (num) {
    for(i = 1; i <= num; i++) {}
    if(num === 2){
      return true;
    }
    return false;
};


var sumPrimesUpTo = function (num) {

    for(i = 1; i <= num; i++) {
       console.log(isPrime(i));
    }
   
};

sumPrimesUpTo(5);

此输出

false
false
false

我似乎不明白为什么for循环会更改输出?

1 个答案:

答案 0 :(得分:5)

i是全局范围的,应该使用let来保持i的范围是for的循环。

您也可以使用var,但是let是更好的选择,因为它会为您提供所需的范围,并且不允许在此块中重新分配它。

var isPrime = function (num) {
    for(let i = 1; i <= num; i++) {}
    if(num === 2){
      return true;
    }
    return false;
};


var sumPrimesUpTo = function (num) {

    for(let i = 1; i <= num; i++) {
       console.log(isPrime(i));
    }

};

sumPrimesUpTo(5);