浅谈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 相关文章推荐
学习ExtJS fit布局使用说明
Oct 08 Javascript
使用JQUERY Tabs插件宿主IFRAMES
Jan 01 Javascript
JS 文件传参及处理技巧分析
May 13 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
Feb 25 Javascript
AngularJS基础学习笔记之控制器
May 10 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
vue中手机号,邮箱正则验证以及60s发送验证码的实例
Mar 16 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
可能被忽略的一些JavaScript数组方法细节
Feb 28 Javascript
layui写后台表格思路和赋值用法详解
Nov 14 Javascript
详解vue中$nextTick和$forceUpdate的用法
Dec 11 Javascript
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
微信小程序中转义字符的处理方法
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通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
一些不错的js函数ajax
2008/08/20 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
javascript的BOM汇总
2015/07/16 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
Ionic3 UI组件之Gallery Modal详解
2017/06/07 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
微信小程序使用checkbox显示多项选择框功能【附源码下载】
2017/12/11 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
python中取绝对值简单方法总结
2020/07/24 Python
Python实现自动签到脚本功能
2020/08/20 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
给女朋友的道歉信
2014/01/10 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
员工离职感谢信
2015/01/22 职场文书
毕业论文致谢信
2015/05/14 职场文书
初中数学教学随笔
2015/08/15 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS