【问题标题】:For loop prints wrong branch of if-else statement firstFor 循环首先打印 if-else 语句的错误分支
【发布时间】:2021-06-02 00:14:34
【问题描述】:

以下代码只是为了测试功能

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

现在我的问题是,即使 if 条件“(1==4)”不为真,为什么我会变假,为什么当执行 if 语句的第一部分变假时代码不会中断

【问题讨论】:

    标签: javascript for-loop if-statement settimeout contains


    【解决方案1】:

    传递给setTimeout 的匿名回调函数被异步调用。因此,可能会在评估另一个 console.log 之前评估 i==4console.log

    【讨论】:

      最近更新 更多