如何使用JavaScript中的闭包

  介绍

这篇文章主要讲解了如何使用JavaScript中的闭包,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。


闭包的含义就是闭合,包起来,简单的来说,就是一个具有封闭功能与包裹功能的结构。所谓的闭包就是一个具有封闭的对外不公开的,包裹结构,或空间。

在JS中函数构成闭包。一般函数是一个代码结构的封闭结构,即包裹的特性,同时根据作用域规则只允许函数访问外部的数据,外部无法访问函数内部的数据,即封闭的对外不公开的特性,因此说函数可以构成闭包。

概括:闭包就是一个具有封闭与包裹功能的结构。函数可以构成闭包。函数内部定义的数据函数外部无法访问,即函数具有封闭性;函数可以封装代码即具有包裹性,所以函数可以构成闭包。

2。闭包有什么用(解决什么问题)?

    <李>闭包不允许外部访问李 <>李要解决的问题就是间接访问该数据李

函数就可以构成闭包,要解决的问题就是如何访问到函数内部的数据

函数foo () {
  var num=123;
  返回num;
  }
  var res=foo ();
  控制台。日志(res);//=祝辞123 

这里的确是访问到函数中的数据了。但是该数据不能第二次访问,因此第二次访问的时候又要调用一次foo,表示又有一个新的num=123出来了。

在函数内的数据,不能直接在函数外部访问,那么在函数内如果定义一个函数,那么在这个函数内部中是可以直接访问的

函数foo () {
  var num=math . random ();
  函数func () {
  返回妈妈;
  }
  返回函数;
  }
  var f=foo ();//f可以直接访问这个num
  var res1=f ();
  var它=f (); 

我们使用前面学习的绘制作用域链结构图的方法来绘制闭包的作用域链结构图,如下:

如何使用JavaScript中的闭包

3。闭包使用举例

<>强如何获得超过一个数据

函数foo () {
  var num1=math . random ();
  var num2=math . random ();
  返回{
  num1:函数(){
  返回num1;
  },
  num2:函数(){
  返回num2;
  }
  }
  }

<>强如何完成读取一个数据和修改这个数据

函数foo () {
  var num=math . random ();
  返回{
  get_num:函数(){
  返回num;
  },
  set_num:功能(价值){
  返回num=价值;
  }
  }
  }

4。基本的闭包结构

一般闭包的问题就是要想办法简洁的获取函数内的数据使用权,那么我们就可以总结出一个基本的使用模型。

    <李>写一个函数,函数内部定义一个新函数,返回新函数,用新函数获得函数内的数据李 <李>写一个函数,函数内部定义个一个对象,对象中绑定多个函数(方法),返回对象,利用对象的方法访问函数内的数据李

5。闭包的基本用法

闭包是为了实现具有私有访问空间的函数的

<强>带有私有访问数据的对象

函数createPerson () {
  var __name__=?“;
  返回{
  getName:函数(){
  返回__name__;
  },
  setName:功能(价值){//如果不姓张就报的错
  如果(value.charAt(0)===& # 39;张& # 39;){
  __name__=价值;
  其他}{
  把新的错误(& # 39;姓氏不对,不能取名& # 39;);
  }
  }
  }
  }
  var p=createPerson ();
  p。set_Name(& # 39;张三丰& # 39;);
  控制台。日志(p.get_Name ());
  p。set_Name(& # 39;张王富贵& # 39;);
  控制台。日志(p.get_Name ()); 

<强>带有私有数据的函数

 var func=function () {}
  函数func () {}
  var foo=(函数(){//私有数据
  返回函数(){//可以使用私有的数据
  …
  };
  });

6。闭包基本模型

<强>对象模型

函数foo () {//私有数据
  返回{
  方法:函数(){//操作私有数据
  }
  }
  }

<>强函数模型

函数foo () {//私有数据
  返回函数(){//可以操作私有数据
  }
  }

如何使用JavaScript中的闭包