For 循环首先打印 if-else 语句的错误分支

Posted

技术标签:

【中文标题】For 循环首先打印 if-else 语句的错误分支【英文标题】:For loop prints wrong branch of if-else statement first 【发布时间】: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 语句的第一部分变假时代码不会中断

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于For 循环首先打印 if-else 语句的错误分支的主要内容,如果未能解决你的问题,请参考以下文章

将“for”循环与 if-else 语句相结合,每个“if”语句中都有多个条件

Go Web编程实战----流程控制语句

Go Web编程实战----流程控制语句

Go Web编程实战----流程控制语句

JS基础整理(if-else for循环)

Java 基本语法---流程控制