gpt4 book ai didi

javascript - 为什么我不能将 "window.location.reload"作为参数传递给 setTimeout?

转载 作者:IT王子 更新时间:2023-10-29 03:08:35 27 4
gpt4 key购买 nike

我希望通过以下代码行深入了解我在 Safari 和 Chrome 中看到的错误:

setTimeout(window.location.reload, 250);

Chrome 报告:
未捕获的类型错误:非法调用

和 Safari:
TypeError: 类型错误

在 FireFox 中,代码运行良好。此外,这段代码在三种浏览器中都运行良好:

setTimeout((function() {
window.location.reload();
}), 250);

Chrome 和 Safari 对此代码没有问题:

var say_hello = function () { alert("hello") };  
setTimeout(say_hello, 250);

导致此错误的 window.location.reload 有什么特别之处?

(不确定它是否有用,但这里有一个 jsfiddle 说明了这一点)

最佳答案

因为 reload() 需要 window.location 作为 this。换句话说 - 它是 window.location 的一种方法。当你说:

var fun = window.location.reload;

fun();

您在调用 reload() 函数时没有任何 this 引用(或带有隐式 window 引用)。

这应该有效:

setTimeout(window.location.reload.bind(window.location), 250);

window.location.reload.bind(window.location) 部分的意思是:获取 window.location.reload 函数并返回一个函数,该函数在被调用时将在 reload() 中使用 window.location 作为 this 引用。

另见

关于javascript - 为什么我不能将 "window.location.reload"作为参数传递给 setTimeout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com