浅谈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 相关文章推荐
不安全的常用的js写法
Sep 15 Javascript
jquery队列queue与原生模仿其实现方法分享
Mar 25 Javascript
javascript实现在网页中运行本地程序的方法
Feb 03 Javascript
javascript使用Promise对象实现异步编程
Mar 01 Javascript
jQuery查看选中对象HTML代码的方法
Jun 17 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
Oct 24 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
Jun 14 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
Jul 12 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 Javascript
Vue自定义全局弹窗组件操作
Aug 11 Javascript
用vue写一个日历
Nov 02 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
YB217、YB235、YB400浅听
2021/03/02 无线电
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
11个用于提高排版水平的基于jquery的文字效果插件
2012/09/14 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
2015/05/22 Python
在Python中移动目录结构的方法
2016/01/31 Python
浅谈python中set使用
2016/06/30 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
python 实现目录复制的三种小结
2019/12/04 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
大学生职业生涯规划书范文
2014/01/04 职场文书
房产代理公证处委托书
2014/04/04 职场文书
病危通知书样本
2015/04/17 职场文书
运动会跳远广播稿
2015/08/19 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python