浅谈js闭包理解


Posted in Javascript onMarch 28, 2019

闭包是js中的一大特色,也是一大难点。简单来说,所谓闭包就是说,一个函数能够访问其函数外部作用域中的变量。

闭包的三大特点为:

1、函数嵌套函数

2、内部函数可以访问外部函数的变量

3、参数和变量不会被回收。

举例来说:

function test(){
  var a=1;
  return function(){
  alert(a);
  }
 }
 var try=test();
 try();//弹出a的值

这个例子中,变量a在test方法外部是无法访问的,但test方法里面,嵌套了一个匿名函数,通过return返回,test作用域中的变量a,可以在匿名函数中访问。并且当test方法执行后,变量a所占内存并不会释放,以达到嵌套的函数还可以访问的目的。

闭包的作用在于,可以通过闭包,设计私有变量及方法。

举例来说:在java中创建perosn类,含有私有变量name。

public class Person{
 private String name='wy';
 public Person(val){
  name=val;
 }
 public void setName(val){
  name=val;
 }
 public String getName(){
  return name;
 }
}

在js中实现类似java创建类的功能:

(function(){
   var name="wangyu";
   Person=function (val) {
    name=val;
   }
   Person.prototype.setName=function(val){
    name=val;
   }
   Person.prototype.getName=function () {
    return name;
   }
  })();
  var person1=new Person("sj");
  alert(this.name)//undefined 因为在function作用域外不能访问
  alert(person1.getName());//sj

在function里面的name,由于是在function作用域中,所以外部无法访问,但是可以通过创建person对象,调用person的方法,来达到修改和访问name值的目的,类似于java类中的私有变量,外部无法访问,只能通过类方法访问。

再看一个私有变量的例子:

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

总结:

1、闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

2、不必纠结到底怎样才算闭包,其实你写的每一个函数都算作闭包,即使是全局函数,你访问函数外部的全局变量时,就是闭包的体现。

以上所述是小编给大家介绍的对js闭包理解和动画详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
关于IE7 IE8弹出窗口顶上
Dec 22 Javascript
JavaScript 组件之旅(一)分析和设计
Oct 28 Javascript
基于jQuery试卷自动排版系统
Jul 18 Javascript
页面按钮禁用与解除禁用的方法
Feb 19 Javascript
js星星评分效果
Jul 24 Javascript
jQuery过滤选择器用法分析
Feb 10 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
Apr 17 Javascript
jQuery的remove()方法使用详解
Aug 11 Javascript
jquery实现的淡入淡出下拉菜单效果
Aug 25 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
Jun 14 Javascript
json数据处理及数据绑定
Jan 25 Javascript
element-ui的回调函数Events的用法详解
Oct 16 Javascript
微信小程序中转义字符的处理方法
Mar 28 #Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 #Javascript
详解Js里的for…in和for…of的用法
Mar 28 #Javascript
ES7之Async/await的使用详解
Mar 28 #Javascript
详解vue-cli3多环境打包配置
Mar 28 #Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 #Javascript
详解vue使用插槽分发内容slot的用法
Mar 28 #Javascript
You might like
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
js预载入和JavaScript Image()对象使用介绍
2011/08/28 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
王纯业的Python学习笔记 下载
2007/02/10 Python
手把手教你python实现SVM算法
2017/12/27 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python制作微博图片爬取工具
2021/01/16 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
产品销售员岗位职责
2013/12/18 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
社区端午节活动方案
2014/01/28 职场文书
小学生检讨书大全
2014/02/06 职场文书
高三高考决心书
2014/03/11 职场文书
英语系本科生求职信
2014/07/15 职场文书
出售房屋协议书范本
2014/10/06 职场文书
客房部经理岗位职责
2015/02/02 职场文书
天河观后感
2015/06/11 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
深入理解python协程
2021/06/15 Python
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android
对象析构函数__del__在Python中何时使用
2022/03/22 Python