浅谈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 相关文章推荐
jQuery入门知识简介
Mar 04 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
jquery+css实现绚丽的横向二级下拉菜单-附源码下载
Aug 23 Javascript
jQuery实现平滑滚动的标签分栏切换效果
Aug 28 Javascript
jQuery实现带玻璃流光质感的手风琴特效
Nov 20 Javascript
分享JavaScript与Java中MD5使用两个例子
Dec 23 Javascript
浅析如何利用JavaScript进行语音识别
Oct 27 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
JS中如何轻松遍历对象属性的方式总结
Aug 06 Javascript
js 函数性能比较方法
Aug 24 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 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中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
解析php取整的几种方式
2013/06/25 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
2013/11/28 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
js定义类的几种方法(推荐)
2016/06/08 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python将列表数据写入文件(txt, csv,excel)
2019/04/03 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
收银出纳员岗位职责
2014/02/23 职场文书
大一新生学期自我评价
2014/04/09 职场文书
村容村貌整治方案
2014/05/21 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
廉洁自律个人总结
2015/02/14 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
小学感恩节活动总结
2015/03/24 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang