为什么在重定向之前运行警报?
Why runs the alert before the redirect?
有人可以在这里解释一下,为什么我在重定向之前收到警报?
有没有办法切换它们?
function test() {
window.location.href="https://www.google.com";
window.onload = alert("It's loaded!")
}
这里有一个例子:
在您当前的 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 将内容传递到其他来源)。
您要离开的页面无法对您要访问的页面执行任何操作。您不能为 下一个 页面设置加载处理程序。
有人可以在这里解释一下,为什么我在重定向之前收到警报? 有没有办法切换它们?
function test() {
window.location.href="https://www.google.com";
window.onload = alert("It's loaded!")
}
这里有一个例子:
在您当前的 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 将内容传递到其他来源)。
您要离开的页面无法对您要访问的页面执行任何操作。您不能为 下一个 页面设置加载处理程序。