JavaScript闭包的两个经典应用场景:计数器与DOM事件绑定

作者:页面旅途

时间:2026-10-21

浏览:73

本文通过两个具体示例解析JavaScript中闭包的经典用法。首先介绍如何利用闭包实现类似C语言静态变量的功能,保持局部变量内存不释放以记录函数调用次数;其次演示如何利用闭包解决在循环中为DOM元素注册事件处理函数时变量共享的问题,确保每个元素能正确获取对应的索引值。

文章目录

本文通过具体实例总结JavaScript中闭包的几种典型应用模式,旨在为读者提供实用的参考代码与思路。

关于闭包的理论资料在网上已非常丰富,但许多读者反馈理解起来仍有难度。因此,本文跳过冗长的理论推导,直接通过两个实际代码案例来展示闭包的核心价值。

利用闭包记录函数调用次数

第一个应用场景是利用闭包记录函数被调用的次数。


function a()
{
  var i = 0;
  function b()
  {
    return ++i;
  }
  return b;
}
var c = a();
c();//1
c();//2

这种实现方式在效果上类似于C语言中的private static变量,其核心优势在于能够保持局部变量的内存不释放,从而在多次调用间维持状态。

解决DOM事件绑定中的变量共享问题

第二个应用场景是解决在循环中正确给DOM元素注册事件处理函数的问题,确保每个元素能绑定正确的上下文数据。


<body>
  <input type="button" id="b1" value="1">
  <input type="button" id="b2" value="2">
  <input type="button" id="b3" value="3">
  <input type="button" id="b4" value="4">
  <script type="text/javascript">
    var buttons = document.getElementsByTagName("input");
    for (var i = 0; i < buttons.length; i++)
    {
      // 方式1:i的值一直是3
      //buttons[i].onclick = function() {
      // console.log(i + " was clicked.");
      //}
      // 方式2:从0到3,是我们要的效果
      (function(i){
        buttons[i].onclick = function() {
          console.log(i + " was clicked.");
        }
      })(i);
    }
  </script>
</body>

如需进一步了解JavaScript相关知识,可参考本站系列教程,包括《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》。

希望上述关于JavaScript程序设计的闭包应用示例能对读者有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章