浅谈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 相关文章推荐
改进:论坛UBB代码自动插入方式
Dec 22 Javascript
js function使用心得
May 10 Javascript
验证控件与Button的OnClientClick事件详细解析
Dec 04 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
Jun 10 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
Nov 06 Javascript
js操作数组函数实例小结
Dec 10 Javascript
Ext JS动态加载JavaScript创建窗体的方法
Jun 23 Javascript
基于element-ui的rules中正则表达式
Sep 04 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
vue的keep-alive用法技巧
Aug 15 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
js前端传json后台接收‘‘被转为quot的问题解决
Nov 12 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实现批量下载百度云盘文件例子分享
2014/04/10 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
js 小贴士一星期合集
2010/04/07 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
ES6函数和数组用法实例分析
2020/05/23 Javascript
Python 返回汉字的汉语拼音
2009/02/27 Python
跟老齐学Python之做一个小游戏
2014/09/28 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
详解爬虫被封的问题
2019/04/23 Python
Python3+Appium安装使用教程
2019/07/05 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
django实现模型字段动态choice的操作
2020/04/01 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
回门宴答谢词
2014/01/13 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
pycharm代码删除恢复的方法
2021/06/26 Python
python自动化测试之Selenium详解
2022/03/13 Python