我有如下代码:
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
推迟到 future 的事件循环滴答,不会。
This article很好地解释了 JavaScript 事件循环
关于javascript - history.back() 之后的代码会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543052/