JavaScript 理解事件委托(delegate)的需要

标签 javascript

我在网上的一篇文章中读到这句话:

Adding event handlers to each of the 1000 cells would be a major performance problem and, potentially, a source of browser-crashing memory leaks.



但我不明白。例如,如果我正在做这样的事情:
const handler = e => // do something

document.querySelectorAll("td").forEach(td => {
   td.addEventListener("click", handler);
});

不要创建 1000 个函数,它们都使用相同的引用,所以我缺少什么?问题是什么?

最佳答案

I don't create 1000 functions, they all use the same reference, so what I am missing?



您仍然会在 1000 个 DOM 节点中创建 1000 个函数引用。这可能看起来并不重要,但表格可能会增长......

当然,你基本上是对的,如果你不创建 1000 个闭包,就不会有那么多问题。然而,你真的有 1000 个按钮都做同样的事情吗?使用闭包,很容易让它们做一些稍微不同的事情;只有一个功能,您需要使其动态依赖于单击的单元格(事件目标)。当您已经这样做时,您可以继续并仅使用单个函数引用和事件委托(delegate)......

关于JavaScript 理解事件委托(delegate)的需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43277340/

相关文章:

javascript - 仅在本地编辑跨域 Iframe 内容

javascript - 限制 TypeScript 中的类型组合

javascript - Ajax 请求在第二次尝试时不起作用

javascript - 在我的页面上包含 Node 模块

javascript - 确定调用了哪些 AngularJS 函数

javascript - 使用搜索栏将 .html 加载到 div 中

javascript - 在 child 之前对 parent 进行排序的算法

javascript - D3 动态 json 键名

javascript - 隐藏、取消隐藏选项卡上的内容更改

javascript - DOMParser 或 XMLSerializer 正在删除我在 IE9 中的命名空间声明