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 MVC架构中Controller的作用与实践  JavaScript如何实现继承_有哪些常用方法  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  如何在Tomcat中配置并部署网站项目?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  深圳网站制作平台,深圳市做网站好的公司有哪些?  详解Oracle修改字段类型方法总结  高性能网站服务器部署指南:稳定运行与安全配置优化方案  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  海南网站制作公司有哪些,海口网是哪家的?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  高防服务器:AI智能防御DDoS攻击与数据安全保障  EditPlus中的正则表达式 实战(4)  如何在Windows虚拟主机上快速搭建网站?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  如何正确选择百度移动适配建站域名?  如何在IIS中配置站点IP、端口及主机头?  如何用wdcp快速搭建高效网站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  如何快速上传自定义模板至建站之星?  Android自定义listview布局实现上拉加载下拉刷新功能  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  音响网站制作视频教程,隆霸音响官方网站?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  javascript读取文本节点方法小结  Laravel如何升级到最新版本?(升级指南和步骤)  如何用VPS主机快速搭建个人网站?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  如何快速搭建个人网站并优化SEO?  网站优化排名时,需要考虑哪些问题呢?  如何在云主机上快速搭建多站点网站?  活动邀请函制作网站有哪些,活动邀请函文案?  如何基于PHP生成高效IDC网络公司建站源码?  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  高端企业智能建站程序:SEO优化与响应式模板定制开发  怎样使用JSON进行数据交换_它有什么限制  如何解决hover在ie6中的兼容性问题  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解