2017-07-16 82 views
1

为什么说这个工程,为什么不能将window.location.reload作为第一类函数传递?

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

但是这不?

setTimeout(window.location.reload, 3000); 

我收到以下错误:TypeError: 'reload' called on an object that does not implement interface Location.

+4

执行上下文。你会发现任何成员函数都是如此。你需要绑定执行上下文'setTimeout(window.location.reload,bind(window.location),3000);'。应该这样做 –

+3

@DayanMorenoLeon除了第一个逗号应该是一个点。 – Yogu

+0

是的,你是对的,错字 –

回答

1

理论上它可以。当你像那样传递它时,它就是这个函数,没有它的执行上下文(this)。由于该功能(内部)使用this,因此失败。您也可以通过console.log注意到这一点。

的解决方案是结合上下文:

setTimeout(window.location.reload.bind(window.location), 3000); 
相关问题