闭包是什么意思(闭包)

你们好,最近小未来发现有诸多的小伙伴们对于闭包是什么意思,闭包这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。

1、 借用百度百科闭包的定义:

2、 闭包是一个可以读取其他函数内部变量的函数。

3、 因为在javascript中,只有函数内的子函数才能读取局部变量,所以闭包可以理解为“函数内定义的函数”。

4、 本质上,闭包是连接函数内部和外部的桥梁。

5、 假设有这样一个函数:

6、 functionnv(){

7、 var n=10;

8、 }

9、 它定义了一个变量n,同时也不会直接返回n,然后我想得到其中定义的n。我该怎么办?

10、 我试着在控制台上的函数外直接打印出这个n。很明显,我直接报错了,显示n未定义。

11、 想了想,上面说你不能直接还n,那我间接还应该是可以的。

12、 比如我在这个函数中定义了一个函数subNv,然后让Nv直接返回函数subNv,函数subNv是在函数nv中定义的,这样就可以得到局部变量n,所以可以让subNv返回。

13、 代码如下:

14、 function nv(){

15、 var n=10;

16、 function subNv(){return n;}

17、 return subNv;

18、 }

19、 var subNv=nv();

20、 subNv()

21、 看看此时的运行效果:

22、 在上图中,成功获得了n的值。

23、 总而言之:

24、 当一个函数(nv)内部有一个局部变量(n),不能在外部直接获取时,我们在这个函数内部定义一个函数(subNv),用这个定义的函数来获取这个局部变量。

25、 最后,当我们返回这个子函数(subNv)时,我们可以通过这个返回的函数得到局部变量n。

26、 这时,我们要看看闭包的定义:

27、 1.闭包是一个可以读取其他函数内部变量的函数。

28、 2.在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解为“函数内部定义的函数”。

29、 3.本质上,闭包是连接函数内部和外部的桥梁。

30、 第一遍没看懂?再看第二遍!

31、 第二不行?在来第三遍!

32、 现在看懂了吧。没错,你想的没错!

33、 1. subNv能读取nv中的变量,所以subNv就是闭包。

34、 2. 这个闭包subNv是定义在nv里面的一个函数,

35、 3.闭包subNv作为一个桥梁将函数nv和函数外部联系起来了,是的函数外部也能获取到函数nv里面定义的变量。

36、 闭包的作用:

37、 1.闭包能够获取函数中定义的局部变量

38、 2.由于使用闭包就等于使用了函数内部定义的酒吧变量,所以闭包会使得函数中的变量都被保存在内存中,不会被销毁

39、 类比:

40、 如果你学过面向对象的语言,比如javas,c++,c#等,那么其实你可以发现,

41、 如果把某个函数当成一个类的话,定义在其中的局部变量很像是类的私有属性,而闭包则像其专用于获局部变量的私有方法(只是从功能方式上简单的类比下,本质上他们是不一样的)

以上就是闭包这篇文章的一些介绍,希望对大家有所帮助。

免责声明:本文章由会员“马俊华”发布如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系

马俊华
免责声明:本文章由会员“马俊华”发布,如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务;如因作品内容、版权和其他问题请于本站联系