Javascript для цикла вызывает неожиданное поведение

1

Образец кода 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

Теперь у нас есть тот же пример кода, но с циклом for в isPrime uncommented.

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 меняет результат?

  • 5
    Вы используете глобальную переменную i в обеих функциях.
  • 2
    используйте let (или var ) для объявления вашей переменной: for(let i = 1; i <= num; i++)
Показать ещё 6 комментариев
Теги:

1 ответ

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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню