闭包

2018-10-08  本文已影响0人  前端二营长

阮大大传送门:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

一、变量作用域

闭包与作用域密不可分,javascript(以下简称js)变量作用域无非两种:局部和全局。

js特殊之处函数内部可以直接读取函数外部的变量:链式作用域,子对象可以一级一级的向上寻找父对象的变量,所以父对象的所有变量对子对象都是可见的,但是反之不可以。

二、如何从外部读取局部的变量呢?

这时候就需要闭包函数来了,在函数内部声明一个函数来读取函数的局部变量,当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄露。

所以本质上闭包函数是函数内部与外部的一座桥梁。

三、闭包函数用途

用途有二:
其一:读取函数内部的变量。
其二:使变量始终存在于内存中。

四、注意

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

上一篇下一篇

猜你喜欢

热点阅读