我的addEventListener(#btn-1)中有一个函数,我想最终删除它.我知道将函数保存到变量是一种方法,但除非将其包装在函数中,否则传递"this"将不起作用,而函数现在无法删除,因为它要么是匿名函数,要么不是对同一函数的引用,即使它已命名.有没有办法做到这一点?

const anonFunction = function(dis, str) {
  console.log(dis);
  console.log(str);
}

const myFn = function() {
  anonFunction(this, 'hello world');
}

document.querySelector('#btn-1').addEventListener('click', function() {
  anonFunction(this, 'hello world');
});

document.querySelector('#btn-2').addEventListener('click', function() {
  // doesn't work
  document.querySelector('#btn-1').removeEventListener('click', anonFunction);
});
<button id="btn-1" type="button">Call Function</button>
<button id="btn-2" type="button">Remove Event Listener</button>

UPDATE: SOLVED

使另一个函数调用分配给变量的主函数,并在添加和删除事件侦听器时将其作为要插入的函数.

const anonFunction = function(dis, str) {
  console.log(dis);
  console.log(str);
}

const myFn = function() {
  anonFunction(this, 'hello world');
}

document.querySelector('#btn-1').addEventListener('click', myFn);

document.querySelector('#btn-2').addEventListener('click', function() {
  document.querySelector('#btn-1').removeEventListener('click', myFn);
});
<button id="btn-1" type="button">Call Function</button>
<button id="btn-2" type="button">Remove Event Listener</button>

推荐答案

只需命名使用this的函数.

const anonFunction = function(dis, str) {
  console.log(dis);
  console.log(str);
}

const listener = function() {
  anonFunction(this, 'hello world');
};

document.querySelector('#btn-1').addEventListener('click', listener);

document.querySelector('#btn-2').addEventListener('click', function() {
  // doesn't work
  document.querySelector('#btn-1').removeEventListener('click', listener);
});
<button id="btn-1" type="button">Call Function</button>
<button id="btn-2" type="button">Remove Event Listener</button>

Javascript相关问答推荐

按钮未放置在html dis位置

如何解决CORS政策的问题

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

使用复选框在d3.js多折线图中添加或删除线条

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

使用原型判断对象是否为类的实例

使用Java脚本导入gltf场景并创建边界框

如何在Angular拖放组件中同步数组?

一个实体一刀VS每个实体多刀S

为什么可选参数的顺序会导致问题?

在查看网页时,如何使HTML中的按钮工作方式类似于鼠标上的滚轮或箭头键?

无法设置RazorPay订阅API项目价格

如果NetSuite中为空,则限制筛选

ComponentWillReceiveProps仍在React 18.2.0中工作

JavaScript:多个图像错误处理程序

当达到高度限制时,如何裁剪图像?使用html和css

每隔一行文本段落进行镜像(Boustrophedon)

如何为两条动态路由创建一个页面?

Node.js的Fetch()调用总是创建新的Express会话

如何在不获取其子元素的文本内容的情况下获取元素的文本内容?