Javascript 中闭包的概念

it2022-05-05  155

一直再说闭包闭包,其实自己一直不懂闭包是个什么意思,今天,上百度找了找闭包的相关资料,参考整理了下,希望以后能用得着;

 

闭包其实是javascript语言中的一个难点,也是该语言的一个特色,据说很多高级应用都需要闭包的支持;

先理解下下面的几个概念:

1、变量的作用域

javascript中声明变量使用var 关键字,稍微了解的同学都知道,加了var关键字声明的变量是局部变量,反之则为局部变量

例如:

  var text = 'hello';   局部变量

  text = 'world';  全局变量

局部变量和全局变量一般在哪里应用得最多呢,不言而喻就是函数中;

局部变量:

      var x = 1;

      function demo1(){

        alert(x);

      }

      demo1(); //结果1

      function demo1(){

        var x = 1;

      }

      alert(x); //结果error

全局变量:

      function demo1(){

        x = 1;

      }

      demo1();

      alert(x); //结果 1

总结:声明变量要加var,负责,同学你声明的变量是一个全局变量!

——————————————————————————————————————————————————

2、如何在外部调用or使用一个局部变量

方法很简单,就是在函数内部在定义一个函数;  (插几句:个人感觉似乎与php面向对象中的某些处理方法有点相似,简单说,一个类中,用public中使用Protect的东西)

直接:

  function demo1(){

    var x = 1;

    function demo2(){

      alert(x); //结果1

    }

  }

  demo1();

解释下上面的代码,x变量是一个局部变量,在外部是无法使用的,但是x相对于demo2是可见的,据说这种结构是javascript特有的‘链式作用域’;

上个例子中,demo2可以读取demo1中的局部变量,那么将demo2作为返回值,在外部就可以取出demo1的内部变量;

 

3.闭包的概念

人家说上个代码中的demo2函数就是闭包。(其实我没懂,我知道结果,但是没想到这会是闭包!!!)

引用网上的资料对闭包的解释:

各种专业文献上的“闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。

由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。

所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

 不知道大家懂了没有!反正我是按这个理解的,上面的解释通俗易懂~~~

4.闭包的用途

话说闭包可以用在很多地方,但是最大的用处有2个:

1.读取函数内部的变量;

2.让变量的值始终保持在内存中。

今天先写这些吧!

 

转载于:https://www.cnblogs.com/mma5694/p/4764303.html


最新回复(0)