You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

addEventListener传函数引用与内部声明的性能差异及函数重建疑问

关于addEventListener中函数声明位置的性能与创建逻辑问题

一、事件触发时函数是否会被重新创建?

不管是哪种写法,函数都不会在事件触发时重新创建,两者的创建时机不同:

  • 写法一:fun函数在代码执行到函数声明语句时就完成创建,整个生命周期内只会生成一次实例。调用addEventListener时只是把这个已存在的函数引用传递给监听器,触发事件时直接调用该实例。
    function fun(){
        a += b;
    }
    element.addEventListener("click",fun);
    
  • 写法二:这里的匿名函数是在代码执行到addEventListener这一行时创建的,同样只会生成一次实例。事件触发时调用的就是这个在绑定阶段创建好的函数,不会每次触发都重新生成。
    element.addEventListener("click", function(){
        a += b;
    });
    

二、微性能层面的差异

在普通业务场景下,两种写法的性能差异完全可以忽略,只有在极端高频绑定的场景(比如每秒绑定数万次监听器)才会体现出细微区别:

  • 写法一:函数在作用域初始化阶段就已创建,绑定监听器时仅传递引用,几乎没有额外开销。
  • 写法二:绑定监听器时需要额外完成一次函数对象的创建,这个过程的开销极小,对页面性能不会产生可感知的影响。

如果是在循环中批量绑定监听器,写法二如果不做优化(比如每次循环都创建新的匿名函数)会生成多个函数实例,可能带来微小的内存开销,但单次绑定的场景下无需担心。

内容的提问来源于stack exchange,提问作者Gurami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:27:39