javascript闭包功能与用法实例分析

发布时间 - 2026-01-11 00:32:33    点击率:

本文实例讲述了javascript闭包功能与用法。分享给大家供大家参考,具体如下:

理解闭包

闭包这个东西,确实是很麻烦。之前我自己的理解也是有一点误差,所以今天将文章修改修改,争取将自己的理解进一步准确化。

闭包说得通熟易懂一点,就是指有权访问另一个函数作用域的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另外一个函数,并返回

我们这里举一个例子来说明,首先我们在函数f1内部定义一个函数f2。

function f1(){
  var n=999;
  function f2(){
    alert(n); // 999
  }
}

f2可以访问f1的作用域,反过来就不行了。现在我们想访问f1中的n,在外层却访问不到,怎么办呢?将f2作为f1的返回值就可以了:

function f1(){
  var n=999;
  function f2(){
    alert(n);
  }
  return f2;
}
var result=f1();
result(); // 999

这个就是闭包。

其实也很简单,那么闭包有什么用呢?

闭包的使用

之前的自己只知道闭包的概念,却并不知道其存在的价值和意义。直到自己在项目中遇到类似的问题后,才发现只有闭包才能解决的情况。

闭包是使用可以带来以下好处

1. 希望一个变量长期驻扎在内存中
2. 避免全局变量的污染
3. 私有成员的存在

我们刚才说到过,闭包可以读取到函数内部的变量,这是由于闭包后函数的堆栈不会释放,也就是说这些值始终保持在内存中。这是一个优点,也是一个缺点。

我们可以通过闭包来实现一个计数器,而不用担心全局变量的污染:

function f1(){
  var n=999;
  nAdd=function(){n+=1}
  function f2(){
    alert(n);
  }
  return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000

可以看到n一直存储在内存中,并没有在f1调用后被自动清除。

我们再来看看如何通过闭包来模拟JavaScript中的私有成员:

var aaa = (function(){
  var a = 1;
  function bbb(){
    a++;
    alert(a);
  }
  function ccc(){
    a++;
    alert(a);
  }
  return {
    b:bbb,    //json结构
    c:ccc
  }
})();
aaa.b();  //2
aaa.c();  //3

这样就可以提供指定的变量供外界访问了。

闭包解决的问题

这是一个很常见的问题,就是利用javascript处理循环的时候,索引i的值不能有效的利用:

这里改成如下格式,形成10个闭包来解决即可:

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。


# javascript  # 闭包  # 通俗易懂地解释JS中的闭包  # JS继承与闭包及JS实现继承的三种方式  # 浅谈JavaScript作用域和闭包  # JS闭包的几种常见形式实例详解  # JS实现闭包中的沙箱模式示例  # JavaScript闭包的简单应用  # 通过示例彻底搞懂js闭包  # JavaScript闭包和回调详解  # 浅谈JS封闭函数、闭包、内置对象  # JavaScript闭包_动力节点Java学院整理  # 深入理解Javascript中的作用域链和闭包  # JS闭包可被利用的常见场景小结  # 利用js的闭包原理做对象封装及调用方法  # JavaScript中闭包的详解  # JS闭包用法实例分析  # 图解Javascript——作用域、作用域链、闭包  # 轻松理解JavaScript闭包  # js中的闭包学习心得  # 自己的  # 这是一个  # 一个函数  # 就可以  # 这是  # 全局变量  # 相关内容  # 遍历  # 说到  # 我们可以  # 数据结构  # 也很  # 给大家  # 才发现  # 说得  # 再来  # 可以看到  # 只知道  # 不行了  # 更多关于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  Laravel怎么判断请求类型_Laravel Request isMethod用法  佛山网站制作系统,佛山企业变更地址网上办理步骤?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何批量查询域名的建站时间记录?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  想要更高端的建设网站,这些原则一定要坚持!  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  jquery插件bootstrapValidator表单验证详解  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  js实现点击每个li节点,都弹出其文本值及修改  JavaScript中的标签模板是什么_它如何扩展字符串功能  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  如何在IIS中配置站点IP、端口及主机头?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Python文本处理实践_日志清洗解析【指导】  香港服务器部署网站为何提示未备案?  在Oracle关闭情况下如何修改spfile的参数  制作企业网站建设方案,怎样建设一个公司网站?  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  如何在七牛云存储上搭建网站并设置自定义域名?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  使用豆包 AI 辅助进行简单网页 HTML 结构设计  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel如何生成API文档?(Swagger/OpenAPI教程)  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  linux top下的 minerd 木马清除方法  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Python结构化数据采集_字段抽取解析【教程】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  iOS中将个别页面强制横屏其他页面竖屏  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何在阿里云服务器自主搭建网站?  北京企业网站设计制作公司,北京铁路集团官方网站?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  专业商城网站制作公司有哪些,pi商城官网是哪个?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】