Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript addEventListener中的location.reload_Javascript_Typeerror_Location Href - Fatal编程技术网

Javascript addEventListener中的location.reload

Javascript addEventListener中的location.reload,javascript,typeerror,location-href,Javascript,Typeerror,Location Href,我试图在单击按钮时重新加载文档。这是我的密码: var e = document.getElementById('a'); e.addEventListener('click',location.reload); 它返回uncaughttypeerror:单击e后非法调用。但是,以下代码起作用,文档被重新加载: var e = document.getElementById('a');//same thing e.addEventListener('click',function(){loca

我试图在单击按钮时重新加载文档。这是我的密码:

var e = document.getElementById('a');
e.addEventListener('click',location.reload);
它返回
uncaughttypeerror:单击
e
后非法调用。但是,以下代码起作用,文档被重新加载:

var e = document.getElementById('a');//same thing
e.addEventListener('click',function(){location.reload()});
//warp location.reload inside function -> works!
我不明白为什么第一个代码不起作用。有人能解释一下吗?谢谢

第一个示例中的回调函数调用缺少()。应该是:

var e=document.getElementById('a');e、 addEventListener('click',location.reload())


调用
location.reload()
时,它不仅调用函数,还将
this
设置为
location
的值,因此这两个值是等效的:

location.reload();
location.reload.call(location);
但是,当您将其提供给
addEventListener
时,只存储函数引用,而不存储
this
的值,因此当调用它时,它相当于

location.reload.call(undefined); // strict mode
location.reload.call(window); // sloppy mode
例如,Firefox提供了一条更清晰的错误消息:
TypeError:对未实现接口位置的对象调用了“reload”。

因此,为了实现正确的行为,您需要创建一个闭包,或者将
绑定到
位置
,这样两者都可以工作:

e.addEventListener('click', function(){location.reload()});
e.addEventListener('click', location.reload.bind(location));

在第一种情况下,eventListener的第二个参数不是function@bugs是的
window.location.reload
是一个函数。可能与No.重复,这将导致
location.reload
的返回值作为回调函数传递,而不是函数引用本身。它将导致页面无限刷新,因为每次加载页面时都会调用函数(以获取其返回值),而不是每次单击按钮时。。。