闭包--整理

来源:互联网 发布:商城系统数据库设计 编辑:程序博客网 时间:2024/06/06 12:40

(文章说明:关于对闭包的解释,有位大神总结的很好,我就直接转啦;其余部分为自己整理)

一、什么是闭包?

       JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。
原理所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层函数体中的临时变量。这使得只要目标对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值。尽管最开始的构造函数调用已经结束,临时变量的名称也都消失了,但在目标对象的方法内却始终能引用到该变量的值,而且该值只能通这种方法来访问。即使再次调用相同的构造函数,但只会生成新对象和方法,新的临时变量只是对应新的值,和上次那次调用的是各自独立的。

闭包实例与分析

function a() {  var i = 0;  function b() { alert(++i); }  return b;}var c = a();c();
这段代码有两个特点:
1、函数b嵌套在函数a内部;
2、函数a返回函数b。


这样在执行完var c=a()后,变量c实际上是指向了函数b,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包。因为函数a外的变量c引用了函数a内的函数b,就是说:当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

二、用途:

一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。 
三、缺点:

常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。 
四、作用(使用场景):

可以用来管理私有变量和私有方法,将对变量(状态)的变化封装在安全的环境中,使得这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作。 
五、闭包有三个特性: 
1.函数嵌套函数 
2.函数内部可以引用外部的参数和变量 
3.参数和变量不会被垃圾回收机制回收 

原创粉丝点击