Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.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 onload事件处理程序是否在执行后自动释放?_Javascript_Html - Fatal编程技术网

Javascript onload事件处理程序是否在执行后自动释放?

Javascript onload事件处理程序是否在执行后自动释放?,javascript,html,Javascript,Html,当某个图像是匿名的时候,它被执行后,它的onload事件会被释放吗 比如当你这样做的时候 var tempImg = new Image() tempImg.onload = function () { alert("loaded"); } tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"; 还是这个 <img id='img' /

当某个图像是匿名的时候,它被执行后,它的onload事件会被释放吗

比如当你这样做的时候

var tempImg = new Image()
tempImg.onload = function () {
   alert("loaded");
}
tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
还是这个

<img id='img' />
<script>    
    var tempImg = document.getElementById("img")
    tempImg.onload = function () {
       alert("loaded");
    }
    tempImg.src = "https://images.google.ca/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png";
</script>


如果图像在其他地方更改,是否必须以某种方式清除它以防止事件再次触发?如果是,正确的方法是什么?只是设置为未定义?可以在其内部清除它吗?

如果使用
onload
属性分配事件侦听器,则否,它不会自动释放。在某些情况下,如修改图像源,它可能会再次触发。您可以通过将属性设置为
undefined
null
,或
delete
来清除它。这可以在事件处理函数本身内部完成:

image.onload = function(event) {
  delete image.onload;
  /* do something */
};
如果您使用
addEventListener()
来处理事件,则需要使用
removeEventListener()
。我们可以向函数添加内部名称,以便引用它:

image.addEventListener('load', function myLoadHandler(event) {
  image.removeEventListener(myLoadHandler);
  /* do something */
});
然而,在较新的浏览器中,有一个比这两个更好的选择。您可以定义一个事件侦听器,该侦听器将通过使用新的
once
选项自动删除自身:

image.addEventListener('load', function(event) {
  /* do something */
}, { once: true });

我不知道你在问什么。是否询问调用事件侦听器后是否需要删除它?@Jonasw
=null
tempImg.onload=null
更为正确,因为对于全新的
Image
@TrevorD来说,
onload
默认为
null
,不仅可以,而且非常方便:
this.onload=null
tempImg.onload=function(){tempImg.onload=null;..
此.onload=null
选项3似乎非常吸引人。谢谢!注意
删除img.onload
不起作用,因为onload是一个getter/setter。您需要使用
img.onload=null