for(var i = 2;i >= 1;i--) {
  setTimeout(function (i) {
    console.log(i);
  },1000);
  console.log("hii");
}


此代码将输出显示为
  • hii
  • hii
  • 未定义
  • 未定义

  • 在以以下格式使用setTimeout之后给出不同的输出

    for(var i = 2;i >= 1;i--) {
      setTimeout(print(i),5000);
      console.log("hii");
    }
    function print(i) {
      console.log(i);
    }


    此代码将输出显示为
  • 2
  • hii
  • 1
  • hii

  • 我不明白为什么在第二种情况下代码是同步执行的。

    最佳答案

    因为在那里您已经调用了print函数,所以不会将其作为回调传递。在这种情况下,它将完成print函数的执行,然后将返回值作为第一个参数传递给setTimeout。

    这就是您要尝试的:-

    for(var i = 2;i >= 1;i--) {
      setTimeout(print(i),5000);
      console.log("hii");
    }
    function print(i) {
      return function(){console.log(i)}
    }
    

    关于javascript - 为什么Javascript使用setTimeout函数同步和异步显示输出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40650948/

    10-09 21:21