🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
闭包值得单独说一说,但不值得长篇大论,有许多新手包括自己以前也是被这个玩意儿搞迷糊了。 [点我查看mdn的闭包](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures) ![](https://box.kancloud.cn/402da9ceec3b8260b3b8bee91a0665d5_43x56.png) 闭包的定义有很多,当理解后发现每种说法都正确,没有理解的时候没看每一种说法都很迷糊。 闭包,其实就**是**一个**函数**,能**访问其他函数内部**作用域**变量**的函数。 * * * * * (小白读一遍肯定有点绕,梳理一下:闭包就是一个函数,一个什么样的函数?能访问到其他函数作用域的一个函数) * * * * * 知乎上看到一个很有趣的说法 > 我的年龄是秘密,你想知道。 > 但是每次我都含糊其辞的对你说 undefined; > 为了防止我自己也忘记或搞错自己的年龄,我办了一张身份证,上面记录我的年龄信息,藏在我家里。 > 你知道了这件事,为了得到我的年龄,决定对我投其所好, > 于是你送我一只逗比间谍猫。作为感谢我给了你一把我家的钥匙,方便你有空来看猫。 > 这只猫实在太神奇了,每次都能找到我的身份证,并把信息传递给你。 > 于是你每次想知道我的年龄的时候就来看猫, > 然后间谍猫每次都能把我的最新的年龄信息反馈给你。、 > 作者:闫俊虎 也有说法闭包,就是**带数据的函数**,也说的很到位。 下面就是一个很典型的闭包 ![](https://box.kancloud.cn/340714d0f868b0ed93e5bebaadc3e3e6_254x332.png) 这样可以有私有变量,外面是访问不到a的,模块化也是依靠这个特征。 下面这个是不是很熟悉 ![](https://box.kancloud.cn/393a6bbd483596fc7938122cefb87129_558x353.png) 很多第三方裤都会这样去使用闭包,包括流行了十多年的jquery框架也很多地方使用这种。 小练习 ~~~ /* * 题目: *创建一个工厂函数 createPerson,需要完成以下要求: * 1.保存传入参数 name 到一个私有变量中 * 2.函数返回一个对象,且对象带有一个方法 getName,用于返回对象的私有变量 name 的值 */ function createPerson(name) { var pvName =name; return { getName:function(){ return pvName; } } } ~~~