簡體   English   中英

history.back() 之后的代碼會發生什么?

[英]What happens to code after history.back()?

我有如下代碼:

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

  • 是否保證將執行myFunction() 還是不會被執行?

  • 這是一種可能的競爭條件,其中history.back()異步發生並且是否調用myFunction()取決於不可控事件的時間?

規范history.back 將任務排隊

因此,實際的歷史操作代碼(在 JS 實現內部)將在主事件循環的下一次運行期間執行。 您對myFunction調用在當前執行輪次中同步執行,因此它將始終在合規環境中執行。

但是,只有myFunction同步代碼才能保證執行。 考慮這個例子:

function myFunction() {
  console.log('synchronous');
  debugger

  setTimeout(function() {
    console.log('async');
    debugger
  })
}

window.history.back();
myFunction();

總是命中第一個調試器語句。 第二個,使用setTimeout推遲到未來的事件循環滴答,不會。

這篇文章很好地解釋了 JavaScript 事件循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM