JavaScript函数默认参数未生效,事件监听调用时参数为PointerEvent
问题原因
addEventListener 绑定的回调函数被事件触发时,浏览器会自动传入事件对象作为第一个实参,你的函数第一个参数名为remove,即使给它设置了默认值false,只要有实参传入,默认值就不会生效,因此remove会被赋值为浏览器传入的PointerEvent对象。
手动调用时你主动传了布尔值作为参数,参数接收逻辑符合预期。
解决方案
提供3种常用修复方式,可按需选择:
- 方案1:绑定时用匿名函数包装回调,手动调用时不传参数,触发默认值
修改绑定代码即可,原有函数逻辑、手动调用的写法都不需要改动:infoBtnCB.addEventListener("click", () => clickEventInfoBtn_CB()); - 方案2:调整函数参数顺序,预留事件参数位
修改函数定义,将事件参数放在第一位,自定义参数放在第二位并设置默认值:
手动调用需要传function clickEventInfoBtn_CB(event, remove = false) { // 原有逻辑完全不变 }true时,第一个参数填null/undefined即可:clickEventInfoBtn_CB(null, true) - 方案3:函数内部做参数类型兼容,无需修改绑定逻辑
在函数开头加一层判断,如果传入的第一个参数是事件对象,就重置remove为默认值:function clickEventInfoBtn_CB(remove = false) { // 新增类型判断 if (remove instanceof Event) { remove = false } // 原有逻辑完全不变 }
内容的提问来源于stack exchange,提问作者Zandium
相关产品推荐
相关产品推荐

