Javascript 为什么“警惕”(“第二次”);`在“window.history.back();”之前执行?

Javascript 为什么“警惕”(“第二次”);`在“window.history.back();”之前执行?,javascript,Javascript,当我运行以下两个JavaScript命令时 >window.history.back();警报(“第二次”) …我希望窗口转到上一页,然后显示警报。实际情况是“第二个”首先弹出,然后窗口返回。如果我像这样反转它们 >警报(“第二次”);window.history.back() …命令仍以相同的顺序执行。关于JavaScript控制流,我不了解什么?如何获取window.history.back()要先运行吗 嗯,在加载另一个页面后,不显示警报是有道理的。脚本是加载页面的一部分,因此如果这样做可

当我运行以下两个JavaScript命令时

>window.history.back();警报(“第二次”)

…我希望窗口转到上一页,然后显示警报。实际情况是“第二个”首先弹出,然后窗口返回。如果我像这样反转它们

>警报(“第二次”);window.history.back()


…命令仍以相同的顺序执行。关于JavaScript控制流,我不了解什么?如何获取
window.history.back()要先运行吗

嗯,在加载另一个页面后,不显示警报是有道理的。脚本是加载页面的一部分,因此如果这样做可行,就意味着可以在上一个页面中插入javascript,这当然是不可取的

在我看来,有三种可能性:

  • back函数正在阻塞并立即工作,导航到上一页并终止正在运行的脚本。这显然没有发生,否则你根本不会得到警告
  • back函数立即起作用,但只有当浏览器有足够的信息开始加载其他文档时,脚本才会终止。事实似乎并非如此。如果是,浏览器可能会在警报打开时在后台加载文档,但这不会发生
  • back函数只是向浏览器发出返回的信号,脚本会一直运行,直到在请求实际完成之前处于空闲状态。情况似乎是这样。导航仅在警报关闭且脚本结束时启动。(至少是镀铬的)

  • 无论如何,如果您想让它工作,您必须从您导航到的页面调用
    警报。

    在实际执行返回之前,必须将控件返回浏览器。它只是告诉页面,当你有机会时,返回

    控件返回后,将调用浏览器卸载钩子(
    onbeforeunload
    onunload
    ,浏览器特定事件)。

    我认为这是因为.back()不是阻塞函数,所以代码一直执行到页面以及javascript语句被卸载为止。