javascript - 关于js的小问题
PHP中文网
PHP中文网 2017-04-11 09:54:23
[JavaScript讨论组]

直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        p{
            width: 100px;
            height: 100px;
            background: red;
        }
    </style>
</head>
<body>
    <p id="p"></p>
    <script>
        var op = document.querySelector('p');
        op.onclick = function(){
            alert(123);
        }
        op = null;    
    </script>
</body>
</html>

我在看高级程序设计里面内存泄漏时候想到的一个问题,既然op=null了,那么为什么点击事件还能执行.根据前面我学习的var op = document.querySelector('p'); op应该是个指针,指向引用类型p对象,但后面op改变了指向,变成了null 那么我觉得op.onclick事件不就不起作用了吗

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
阿神

因为在你的DOM元素这个节点树上,你的这个p还是存在的!

就是说这个op这个元素本身只要存在,第一次执行的时候就将点击事件绑定在这个节点上了除了销毁,否则事件一直存在

图片描述

怪我咯

已经给p绑定了,跟事后op有啥关系

怪我咯

事件时绑定在p这个标签上的,你将p变量设制成null,并不会将p销毁。

天蓬老师

这么和你说吧,快递小哥把快递交给你后,快递小哥走了,但是快递不是已经给你了吗?
所以类似的,通过op这个引用,把事件处理函数绑定到了p这个dom上,之后,即使op这个引用被销毁了,但是函数绑定已经完成了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号