使用 once: true 选项可让事件监听器只执行一次后自动移除,无需手动调用 removeeventlistener;它作为 addeventlistener 的配置对象传入,支持与其他选项如 capture、passive 共存,且由浏览器保障卸载准确性。

在 JavaScript 中,给事件监听器配置 once: true 选项,就能让该监听器只执行一次,之后自动移除——无需手动调用 removeEventListener。
使用 addEventListener 的 once 选项
这是最直接的方式。把 { once: true } 作为第三个参数传入 addEventListener:
- 它是一个配置对象,除了
once,还可同时设置capture、passive等其他选项 - 一旦事件触发,监听器执行完就会被浏览器自动清理,后续同类型事件不会再响应
- 适用于一次性操作,比如初始化后收尾、表单提交后禁用按钮、加载完成回调等
示例:
button.addEventListener('click', () => {
console.log('只点一次有效');
}, { once: true });
once 和手动 removeEventListener 的区别
不用 once 时,常需在回调里先执行逻辑,再调自己来卸载:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
function handleClick() {
console.log('处理一次');
button.removeEventListener('click', handleClick);
}
button.addEventListener('click', handleClick);
这种方式容易出错:比如函数名写错、箭头函数无法引用、或监听器加在错误目标上。而 once: true 由浏览器保障卸载时机和准确性,更简洁可靠。
注意作用域与 this 指向
once 不影响回调内的 this 或闭包行为。如果用箭头函数或绑定 this,依然生效:
- 箭头函数能正常访问外层变量,且只触发一次
- 用
bind绑定的this也照常工作 - 若监听器依赖外部状态(如某个开关变量),仍需自行控制逻辑,
once只管移除监听器本身
兼容性与降级建议
once 选项在现代浏览器中支持良好(Chrome 55+、Firefox 50+、Edge 79+、Safari 15.4+)。如需兼容旧版 IE,可封装一个简易 polyfill:
function addOnceListener(el, type, handler, options = {}) {
const wrapped = function(...args) {
handler.apply(this, args);
el.removeEventListener(type, wrapped, options);
};
el.addEventListener(type, wrapped, options);
}
但绝大多数项目已无需考虑 IE,直接用原生 once 更轻量清晰。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










