浅谈js闭包理解

 更新时间:2019年04月01日 14:51:34   作者:yujin0222  
这篇文章主要介绍了js闭包理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

闭包是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实现表单元素的操作

    JavaScript实现表单元素的操作

    这篇文章介绍了JavaScript操作表单元素的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 浅谈Javascript常用正则表达式应用

    浅谈Javascript常用正则表达式应用

    这篇文章主要介绍了Javascript常用正则表达式应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • JavaScript中的事件循环方式

    JavaScript中的事件循环方式

    这篇文章主要介绍了JavaScript中的事件循环方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • js函数中onmousedown和onclick的区别和联系探讨

    js函数中onmousedown和onclick的区别和联系探讨

    了解这两个事件的区别,但是实际并没有使用到这两个事件的区别去做一些操作,通常使用onclick的时候也可以使用onmousedown,使用onclick的时候更多一些
    2013-05-05
  • JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)

    JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)

    这篇文章主要介绍了JavaScript onkeypress事件入门实例,onkeypress事件捕捉按下或按住一个键盘按键的情况,需要的朋友可以参考下
    2014-10-10
  • 在javascript中关于节点内容加强

    在javascript中关于节点内容加强

    本篇文章,小编为大家介绍,关于在javascript中关于节点内容加强的问题
    2013-04-04
  • Redis基本知识、安装、部署、配置笔记

    Redis基本知识、安装、部署、配置笔记

    这篇文章主要介绍了Redis基本知识、安装、部署、配置笔记,本文讲解了基本知识、安装Redis、Redis的配置等知识,需要的朋友可以参考下
    2015-03-03
  • js常用的键盘事件有哪些(用法示例)_键码keyCode对照表

    js常用的键盘事件有哪些(用法示例)_键码keyCode对照表

    用户按下键盘上的键,首先会触发keydown事件,然后是keypress事件,最后是keyup事件。其中,keydown和keypress事件是在文本框发生变化之前被触发;而keyup在文本框发生变化之后被触发。如果用户按下一个键不放,就会重复触发keydown和keypress事件。
    2023-02-02
  • JavaScript入门教程(4) js浏览器对象

    JavaScript入门教程(4) js浏览器对象

    navigator 浏览器对象,包含了正在使用的 Navigator 的版本信息。反映了当前使用的浏览器的资料。JavaScript 客户端运行时刻引擎自动创建 navigator 对象。
    2009-01-01
  • JavaScript DOM学习第六章 表单实例

    JavaScript DOM学习第六章 表单实例

    在这一章我有一个检查用户输入然后打印用户输入的表单和代码。下面我会着重讲解检测文本的代码。
    2010-02-02

最新评论