我有如下代码:
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/