闭包

作者: 前端二营长 | 来源:发表于2018-10-08 23:30 被阅读0次

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

    一、变量作用域

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

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

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

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

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

    三、闭包函数用途

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

    四、注意

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

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

    相关文章

      网友评论

          本文标题:闭包

          本文链接:https://www.haomeiwen.com/subject/jnssaftx.html