Цикл For сначала выводит неправильную ветвь инструкции if-else

#javascript #for-loop #if-statement #settimeout #contains

#javascript #цикл for #if-statement #settimeout #содержит

Вопрос:

следующий код предназначен только для проверки функциональности

 for (var i = 1; i <= 5; i  ) {

  if(i==4){
    console.log(document.getElementById("loading").classList.contains("invisible"));
    break;
  }else{
    (function(i){ 
    setTimeout(function() { console.log(i) }, i*1000);
    })(i);
  }
  
}
/*this basically gives true or false as result
document.getElementById("loading").classList.contains("invisible")*/
 

это журнал консоли

 false
1
2
3
 

Теперь мой вопрос в том, как и почему я получаю false, даже если условие if «(1 == 4)» неверно, и почему код не прерывается, когда первая часть оператора if выполняется для получения false

Ответ №1:

Переданная анонимная функция обратного setTimeout вызова вызывается асинхронно. Следовательно, может быть так, что console.log for i==4 вычисляется до console.log того, как будет вычислен другой.