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

时间:2016-10-07 09:57:29

标签: javascript redirect alert

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

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

这是一个例子:

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

3 个答案:

答案 0 :(得分:1)

这里有三个不同的问题:

加载新位置是异步

1. days 02/01/2008 03/01/2008 04/01/2008 2. 7 4.76 5.87 4.36 分配新值不会阻止所有内容,直到加载新页面为止。它将分配值,然后,在将来的某个时刻,浏览器将加载新页面。与此同时,一切都将继续正常进行。

期望

location传递一个函数

onload 调用警报功能(立即)并被评估为该调用的返回值(这不是函数)。然后将该返回值分配给alert("It's loaded!")

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

onload

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

每个页面都是一个单独的JS环境

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

您要离开的页面无法对您要访问的页面执行任何操作。您无法为 next 页面设置onload处理程序。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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