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下function声明一些小结
Dec 28 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
Sep 16 Javascript
jQuery中$.fn的用法示例介绍
Nov 05 Javascript
js判断复选框是否选中及选中个数的实现代码
May 30 Javascript
浅谈JavaScript 标准对象
Jun 02 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
巧用canvas
Jan 21 Javascript
js+canvas实现动态吃豆人效果
Mar 22 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
JavaScript运行机制实例分析
Apr 11 Javascript
浅谈vue2的$refs在vue3组合式API中的替代方法
Apr 18 Vue.js
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指定函数参数默认值示例代码
2013/12/04 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
浅谈Postman解决token传参的问题
2018/03/31 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
详解Python3 基本数据类型
2019/04/19 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
市场部规章制度
2014/01/24 职场文书
四群教育工作实施方案
2014/03/26 职场文书
环境科学专业求职信
2014/08/04 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
2016年校长新年寄语
2015/08/17 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL