浅谈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 相关文章推荐
科讯商业版中用到的ajax空间与分页函数
Sep 02 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
Oct 12 Javascript
jquery实现简单文字提示效果
Dec 02 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
Feb 18 Javascript
使用jQuery,Angular实现登录界面验证码详解
Apr 27 jQuery
vue.js实现数据动态响应 Vue.set的简单应用
Jun 15 Javascript
js实现左右两侧浮动广告
Jul 09 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
Nov 26 Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
Vue利用Blob下载原生二进制数组文件
Sep 25 Javascript
一篇文章了解正则表达式的替换技巧
Feb 24 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+javascript模拟Matrix画面
2006/10/09 PHP
PHP提取中文首字母
2008/04/09 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
php动态变量定义及使用
2015/06/10 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
JavaScript中的标签语句用法分析
2015/02/10 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
javaScript+turn.js实现图书翻页效果实例代码
2017/02/16 Javascript
深入浅析Vue.js中 computed和methods不同机制
2018/03/22 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
使用python实现knn算法
2017/12/20 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
Python实现结构体代码实例
2020/02/10 Python
苹果美国官方商城:Apple美国
2016/08/24 全球购物
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
新浪网技术部笔试题
2016/08/26 面试题
为什么要用EJB
2014/04/17 面试题
演讲稿怎么写才完美
2014/01/02 职场文书
二手车转让协议书
2015/01/29 职场文书
python实现简易名片管理系统
2021/04/11 Python
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android
Python创建SQL数据库流程逐步讲解
2022/09/23 Python