Javascript onload事件处理程序是否在执行后自动释放?
当某个图像是匿名的时候,它被执行后,它的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' /
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
。