Не могу понять, является ли это утверждение неверным или clearInterval - PullRequest
1 голос
/ 19 марта 2019

Играл с несколькими учебниками, которые я нашел в Интернете, но потом я наткнулся на это, не зная, почему мое утверждение if не сработает

var myVar;
var myNum;
myNum = 0;

function alertFunc() {
  myNum = myNum + 1;
  console.log("Hello! " + myNum);
}

function myFunction() {

  myVar = setInterval(alertFunc, 1000);

  if (myNum == 3) {
    clearInterval(myVar);
  }
}

console.log(myFunction());

Ответы [ 4 ]

0 голосов
/ 19 марта 2019

Я думаю, что вы хотите очистить интервал.

function myFunction() {

  myVar = setInterval(alertFunc, 1000);

  if (myNum == 3) {  // this if blocktrue will never happen
    clearInterval(myVar);
  }
}

Причина: указанное выше значение true, если блок true, никогда не произойдет, так как он вызывается один раз , когда myNum равно 1.

Так что вам нужно переписать проверку в функции интервала, как написано ниже.

var myVar;
var myNum;
myNum=0;

function alertFunc() {
  myNum=myNum+1;
  console.log("Hello! " + myNum);
  if (myNum==3){ //when myNum is 3 clear the timer interval.
    clearInterval(myVar);
  }

}

function myFunction() {

  myVar = setInterval(alertFunc, 1000);

}


console.log(myFunction());
0 голосов
/ 19 марта 2019

Вы должны проверить условие

if (myNum == 3) {
   clearInterval(myVar);
}

в вашем alertFunc(), поскольку оно выполняется каждый интервал. Текущее место вашего if никогда не будет истинным, потому что оно запускается только один раз после установки интервала, который myNum равен 0, когда вы его инициализировали.

Вот что вы хотите.

var myVar;
var myNum;
myNum = 0;

function alertFunc() {
  if (myNum == 3) {
    clearInterval(myVar);
  } else {
    myNum = myNum + 1;
    console.log("Hello! " + myNum);
  }
}

function myFunction() {
  myVar = setInterval(alertFunc, 1000);
}

console.log(myFunction());
0 голосов
/ 19 марта 2019

Вам нужно позвонить на clearInterval в alertFunc, как показано ниже

function alertFunc() {
   myNum = myNum + 1;
  console.log("Hello! " + myNum);
   if (myNum == 3) {
       clearInterval(myVar);
   }
 }

из myFunction вы звоните alertFunc с setInterval, поэтому код не выполняется ниже

0 голосов
/ 19 марта 2019

Только потому, что он больше не вызывает myFunction () снова, он только проверяет условие if в первый раз, которое равно 0

var myVar;
var myNum;
myNum = 3;

function alertFunc() {
  myNum = myNum + 1;
  console.log("Hello! " + myNum);
  console.log(typeof myNum);
}

function myFunction() {

  myVar = setInterval(alertFunc, 1000);

  if (myNum == 3) {
    clearInterval(myVar);
  }
}

console.log(myFunction());
...