浅谈js闭包理解


Posted in Javascript onApril 01, 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 相关文章推荐
javascript 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
js和as的稳定传值问题解决
Jul 14 Javascript
JS实现局部选择打印和局部不选择打印
Apr 03 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
Dec 31 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
May 12 Javascript
Node.js中防止错误导致的进程阻塞的方法
Aug 11 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
Sep 21 Javascript
vue中使用vee-validator完成表单校验方案
Nov 01 Javascript
Javascript var变量删除原理及实现
Aug 26 Javascript
详解webpack的clean-webpack-plugin插件报错
Oct 16 Javascript
详解Vue之父子组件传值
Apr 01 #Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 #Javascript
JS中的防抖与节流及作用详解
Apr 01 #Javascript
微信小程序 slot踩坑的解决
Apr 01 #Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
Apr 01 #Javascript
VUE脚手架的下载和配置步骤详解
Apr 01 #Javascript
详解JavaScript中的函数、对象
Apr 01 #Javascript
You might like
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
javascript设计模式 接口介绍
2012/07/24 Javascript
JQuery操作三大控件(下拉,单选,复选)的方法
2013/08/06 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
javascript实现根据汉字获取简拼
2016/09/25 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
[04:26]DOTA2上海特锦赛小组赛第二日 TOP10精彩集锦
2016/02/27 DOTA
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
自我鉴定的范文
2013/10/03 职场文书
机械制造与自动化应届生求职信
2013/11/16 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
银行员工考核评语
2014/12/31 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python