javascript - history.back() 之后的代码会发生什么?

标签 javascript asynchronous concurrency

我有如下代码:

window.history.back();
myFunction(10);
  • history.back() 是阻塞/非阻塞调用吗?

  • 是否可以保证 myFunction() 会被执行?还是不执行?

  • 这是 history.back() 异步发生并且 myFunction() 是否被调用取决于不可控事件的时机?

最佳答案

spechistory.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 推迟到 future 的事件循环滴答,不会。

This article很好地解释了 JavaScript 事件循环

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

相关文章:

javascript - 有什么理由不使用异步脚本元素吗?

javascript - 使用 GreenSock (GSAP) 的 float 输入标签

javascript - React-native 应用程序中的 Realm.objects() 返回空对象

javascript - Pixi.js:有没有一种方法可以在运行时分析 javascript,而无需编写大量 console.logs?

javascript - 我应该使用一个组件来使用 ngif 进行编辑和查看,还是将它们分成多个组件?

haskell - 如何实现与 invokeAll 等效的 Haskell

node.js - 如何返回 Node.js 回调

javascript - Angular 异步调用的计时问题

c++ - 等待多个线程通知的条件变量的正确方法

php - 执行检查后 MySQL 中的重复条目 (PHP)