js闭包的理解以及作用.docx
《js闭包的理解以及作用.docx》由会员分享,可在线阅读,更多相关《js闭包的理解以及作用.docx(3页珍藏版)》请在文库网上搜索。
1、JS闭包1.闭包每次看到jQuery的时候,首先想到的就是闭包。这是个常谈的问题了。今天重新回忆了一下闭包。什么是闭包?当有一个函数想要访问另一个函数内部的变量,这个是访问不了的。所有我们要用闭包来访问。所以简单的来说,闭包就是连接函数内部和外部的一座桥梁,通过闭包我们能够访问其他函数内部的变量1.1作用域 想了解闭包,首先要知道作用域。最简单来说:全局变量和局部变量。全局变量(Global variable):可以在脚本的任何位置被引用。 局部变量(Local variable):只存在于声明它的那个函数的内部,这个函数之外是无法引用的。 使用var声明的变量在当前作用域里面才起作用,未使用
2、var申明的变量,不管在任何地方声明的,都是全局变量。用var声明的变量不一定是局部变量1.2闭包的作用 闭包最大的作用就是全局变量私有化。在上面讲过闭包能够访问其他函数内部的变量,还有一个就是能后永久的把一个变量保存在当前作用域中。不会随着函数调用完之后会被JavaScript特有的垃圾回收机制回收。2-1.案例本文我们以闭包两种的主要形式来学习 函数作为返回值在这段代码中,a()中的返回值是一个匿名函数,这个函数在a()作用域内部,所以它可以获取a()作用域下变量name的值,将这个值作为返回值赋给全局作用域下的变量b,实现了在全局变量下获取到局部变量中的变量的值2-2再来看一个闭包的经典
3、例子一般情况下,在函数fn执行完后,就应该连同它里面的变量一同被销毁,但是在这个例子中,匿名函数作为fn的返回值被赋值给了fn1,这时候相当于fn1=function()var n = 0 . ,并且匿名函数内部引用着fn里的变量num,所以变量num无法被销毁,而变量n是每次被调用时新创建的,所以每次fn1执行完后它就把属于自己的变量连同自己一起销毁,于是乎最后就剩下孤零零的num,于是这里就产生了内存消耗的问题3-1最后总结一下闭包的好处与坏处好处保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突在内存中维持一个变量,可以做缓存(但使用多了同时也是一项缺点,消耗内存) 匿名自执行函数可以减少内存消耗坏处其中一点上面已经有体现了,就是被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏,解决方法是可以在使用完变量后手动为它赋值为null; 其次由于闭包涉及跨域访问,所以会导致性能损失,我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- js 理解 以及 作用