为什么在重定向之前运行警报?

Why runs the alert before the redirect?

有人可以在这里解释一下,为什么我在重定向之前收到警报? 有没有办法切换它们?

function test() {
  window.location.href="https://www.google.com";
  window.onload = alert("It's loaded!")
}

这里有一个例子:

jsbin: https://jsbin.com/zenidafihu/3

在您当前的 Javascript 线程完成执行之前,重定向不会开始。因此,在函数结束之前,即直到警报被解除之前,该位置不会发生任何事情。

JavaScript 是异步语言。因此,您的警报代码不会等待您的第一个语句(即重定向)完全执行。

这里存在三个不同的问题:

加载新位置是异步的

location 分配新值不会停止一切,直到新页面加载完毕。它将分配值,然后在未来的某个时间点,浏览器将加载新页面。与此同时,一切都会照常进行。

onload 期望传递一个函数

alert("It's loaded!") 调用 警报函数(立即)并计算为 return 值调用(这不是一个函数)。然后 return 值被分配给 onload.

分配功能需要有实际功能,如:

onload = alert.bind(window, "It's loaded!");

onload = function () { alert("It's loaded!"); };

每个页面都是独立的JS环境

离开页面时,您创建了一个新的执行环境。所有变量和数据都丢失了。 (尽管您可以通过 localstorage 和 cookie 存储内容,并通过 URL 将内容传递到其他来源)。

您要离开的页面无法对您要访问的页面执行任何操作。您不能为 下一个 页面设置加载处理程序。