MST

星途 面试题库

面试题:JavaScript性能优化之事件委托

请阐述JavaScript中事件委托的原理,并举例说明如何利用事件委托优化性能,比如在一个包含大量列表项的无序列表中,为每个列表项添加点击事件,应该如何使用事件委托来实现?
41.4万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

事件委托原理

事件委托是利用事件冒泡的特性。当一个事件发生在某个元素上时,该事件会从该元素开始,沿着 DOM 树向上传播,依次经过它的父元素,直到根元素。通过将事件处理程序绑定到共同的祖先元素上,当事件触发时,在祖先元素的事件处理程序中可以根据事件的目标(event.target)来判断实际触发事件的元素,从而执行相应的操作。这样可以减少事件处理程序的数量,提高性能。

利用事件委托优化性能示例(无序列表大量列表项点击事件)

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>事件委托示例</title>
</head>

<body>
  <ul id="list">
    <li>列表项1</li>
    <li>列表项2</li>
    <li>列表项3</li>
    <!-- 大量列表项 -->
  </ul>
  <script>
    const list = document.getElementById('list');
    list.addEventListener('click', function (event) {
      if (event.target.tagName === 'LI') {
        console.log('点击了列表项: ', event.target.textContent);
      }
    });
  </script>
</body>

</html>

在上述代码中,我们没有为每个 <li> 元素单独绑定点击事件,而是将点击事件处理程序绑定到了 <ul> 元素上。当点击任何一个 <li> 元素时,由于事件冒泡,点击事件会传播到 <ul> 元素,在 <ul> 的点击事件处理程序中,通过判断 event.target 是否为 <li> 元素,来决定是否执行相应操作,这样就避免了为大量列表项分别绑定事件处理程序,优化了性能。