我有如下代码:

window.history.back();
myFunction(10);
  • history.back()是阻塞调用/非阻塞调用吗?
  • 是否可以保证会执行myFunction()?还是不会被执行?
  • 这是history.back()异步发生的可能的竞争条件吗?
    是否调用myFunction()取决于不可控事件的时间安排?
  • 最佳答案

    spec表示history.back queues a task

    因此,实际的历史操作代码(在JS实现中是内部的)将在主event loop的下一次运行期间执行。您对myFunction的调用在当前执行周期中同步执行,因此它将始终在兼容的环境中执行。

    但是,只能保证执行myFunction中的同步代码。考虑以下示例:

    function myFunction() {
      console.log('synchronous');
      debugger
    
      setTimeout(function() {
        console.log('async');
        debugger
      })
    }
    
    window.history.back();
    myFunction();
    

    始终会命中第一个调试器语句。第二个(不会使用setTimeout推迟到将来的事件循环滴答中)。

    This article是JavaScript事件循环的很好的解释

    关于javascript - history.back()之后的代码会怎样?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25543052/

    10-12 15:28