闭包是什么意思(闭包)
你们好,最近小未来发现有诸多的小伙伴们对于闭包是什么意思,闭包这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
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、 如果把某个函数当成一个类的话,定义在其中的局部变量很像是类的私有属性,而闭包则像其专用于获局部变量的私有方法(只是从功能方式上简单的类比下,本质上他们是不一样的)
以上就是闭包这篇文章的一些介绍,希望对大家有所帮助。
免责声明:本文章由会员“马俊华”发布如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系