开发者社区> 问答> 正文

对闭包的理解?优缺点?

对闭包的理解?优缺点?

展开
收起
茶什i 2019-11-19 18:11:19 1458 0
2 条回答
写回答
取消 提交回答
  • 技术架构师 阿里云开发者社区技术专家博主 CSDN签约专栏技术博主 掘金签约技术博主 云安全联盟专家 众多开源代码库Commiter

    闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。要注意:(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。 (2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

    2019-11-20 09:04:10
    赞同 展开评论 打赏
  • 概念:闭包就是能够读取其他函数内部变量的函数。

    三大特性:

    函数嵌套函数。 函数内部可以引用外部的参数和变量。 参数和变量不会被垃圾回收机制回收。 优点:

    希望一个变量长期存储在内存中。 避免全局变量的污染。 私有成员的存在。 缺点:

    常驻内存,增加内存使用量。 使用不当会很容易造成内存泄露。 示例:

    function outer() {
      var name = "jack";
      function inner() {
        console.log(name);
      }
      return inner;
    }
    outer()(); // jack
    
    
    function sayHi(name) {
      return () => {
        console.log(`Hi! ${name}`);
      };
    }
    const test = sayHi("xiaoming");
    test(); // Hi! xiaoming
    
    

    虽然 sayHi 函数已经执行完毕,但是其活动对象也不会被销毁,因为 test 函数仍然引用着 sayHi 函数中的变量 name,这就是闭包。 但也因为闭包引用着另一个函数的变量,导致另一个函数已经不使用了也无法销毁,所以闭包使用过多,会占用较多的内存,这也是一个副作用。

    2019-11-20 15:50:09
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JAVA反射原理以及一些常见的应用 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载