JS中闭包的经典用法小结(2则示例)


Posted in Javascript onDecember 28, 2016

本文实例总结了JS中闭包的经典用法。分享给大家供大家参考,具体如下:

闭包这个东西,网上有很多介绍资料。个人看了很多,还是一知半解。这里不做理论介绍,直接给出2个例子。

代码1:记录函数被调用的次数

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

这种方式类似C语言中的private static变量,能够保持局部变量的内存不释放。

代码2:正确给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程序设计有所帮助。

Javascript 相关文章推荐
浅谈javascript 面向对象编程
Oct 28 Javascript
jQuery温习篇 强大的JQuery选择器
Apr 24 Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 Javascript
js 数组去重的四种实用方法
Sep 09 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
Mar 21 Javascript
利用JQuery写一个简单的异步分页插件
Mar 07 Javascript
微信小程序 Record API详解及实例代码
Sep 30 Javascript
简单理解js的prototype属性及使用
Dec 07 Javascript
vue-cli3.0配置及使用注意事项详解
Sep 05 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 Javascript
AngularJS实现网站换肤实例
Feb 19 #Javascript
详解js树形控件—zTree使用总结
Dec 28 #Javascript
js 轮播效果实例分享
Dec 28 #Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 #Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 #Javascript
Angular使用ng-messages与PHP进行表单数据验证
Dec 28 #Javascript
Bootstrap中datetimepicker使用小结
Dec 28 #Javascript
You might like
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
php数组(array)输出的三种形式详解
2013/06/05 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
简单PHP会话(session)说明介绍
2016/08/21 PHP
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
JS获取时间的方法
2015/01/21 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
微信小程序class封装http代码实例
2019/08/24 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
Python使用numpy模块创建数组操作示例
2018/06/20 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
在Tensorflow中查看权重的实现
2020/01/24 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
利用python汇总统计多张Excel
2020/09/22 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
求职简历推荐信范文
2013/12/02 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL