初步了解Javascript 闭包

来源:互联网 发布:影像混搭软件 编辑:程序博客网 时间:2024/06/14 15:59

这段时间在学习Javascript,在过程中记录下一些知识点,以便以后回顾和帮助一些初学的朋友,要是有大神能给提点建议就最好了。

    • 初识闭包
    • 闭包的作用

初识闭包

闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。 —— [ 百度百科 ]

上面的这个定义来自百度百科,看完之后其实你还是不知道闭包是什么东西,那么下面来看一个实际的例子,可能更好理解。

function A(){    function B(){       console.log("Hello!");    }    return B;}var c = A();c();//Hello!

这就是一个最简单的闭包,我们来分步读一下这个例子。
1,定义普通一个函数A。
2,在里面定义一个普通函数B。
3,函数A返回函数B。(在Javascript中函数也是对象,所以可以被当作返回值)
4,把函数A的执行结果赋值给变量c
5,执行c()

用一句话来归纳下,函数A的内部函数B被函数A外面的变量c引用,或者当一个内部函数被外部函数之外的变量引用了,这就是一个闭包。

闭包的作用

为了讲清楚闭包的作用,先说下为什么会形成闭包,之所以会形成闭包是因为Javascript中GC的机制是回收没有被引用的对象,而在上面的例子中,函数B属于函数A,函数B被变量c引用,就是说c间接的引用了函数A,所以A不会被回收,会一直存在于内存之中。下面我们通过改进一下上述例子来证实一下这个结论。

function A(){    var count = 0;    function B(){       count ++;       console.log(count);    }    return B;}var c = A();c();// 1c();// 2c();// 3

每执行一次c(),输出的结果就会加1,说明变量count的值的生命周期被延长了,没有随着函数的执行完毕而消失,count是函数A的局部变量,那说明函数A一直是存在的,他没有消失。

这就是闭包的作用,它延长变量的生命周期,而且不会“污染”全局变量,所以在一些类似的计算或者缓存等场景都可以使用闭包来完成,但是使用闭包也需要谨慎,因为它不会释放内存,使用平凡可能会影响效率。

文章是在慕课网学习相关文章后整理而来,关于闭包的用法还有很多东西,之后学习了还会更新过来。

0 0
原创粉丝点击