什么是闭包?闭包的优缺点?

作用:从外部读取局部变量

为什么外部变量不能读取局部变量

Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。因此可以把闭包简单理解成"定义在一个函数内部的函数"。

 

优点:个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中,不会在f1调用后被自动清除。

缺点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。

 

原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

 

function f1(){

    var n=999;

    function f2(){
      alert(n); // 999
    }

  }

posted @ 2021-09-27 16:54  果果1024  阅读(98)  评论(0)    收藏  举报