我希望通过以下代码行深入了解我在 Safari 和 Chrome 中看到的错误:setTimeout(window.location.reload, 250);
Chrome 报告:Uncaught TypeError: Illegal invocation
和 Safari:TypeError: Type error
在 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
函数并返回一个函数,该函数在调用时将使用 window.location
作为 this
内部 0x2341 引用 0x23131。也可以看看
关于javascript - 为什么我不能将 "window.location.reload"作为参数传递给 setTimeout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10839989/