我的代码如下:
window.history.back();
myFunction(10);
history.back()
是阻止/非阻止呼叫吗?
是否可以确保执行myFunction()
?或者不会被执行?
这是history.back()
异步发生的可能竞争条件吗?
是否调用myFunction()
取决于不可控事件的时间安排?
答案 0 :(得分:6)
spec表示history.back
queues a task。
因此,在下一次运行主event loop期间,将执行实际的历史记录操作代码(JS实现的内部代码)。您对myFunction
的调用在当前执行轮次中同步执行,因此它将始终在兼容环境中执行。
但是,只保证myFunction
中的同步代码可以执行。考虑这个例子:
function myFunction() {
console.log('synchronous');
debugger
setTimeout(function() {
console.log('async');
debugger
})
}
window.history.back();
myFunction();
始终会遇到第一个调试器语句。第二个,使用setTimeout
推迟到未来的事件循环标记,不会。
This article是JavaScript事件循环的一个很好的解释