美文网首页
我理解的闭包

我理解的闭包

作者: 最帅的坏兔子 | 来源:发表于2020-03-23 21:43 被阅读0次

    一、 变量的作用域

    一个变量的作用域(scope)是程序源代码中定义这个变量的区域。按变量作用域可以将变量分为全局变量局部变量
    全局变量:在JavaScript代码中任何地方都是有定义的。
    局部变量:在函数体内部有定义,作用域是局限性的。

    var a = 0; //  全局变量a
    function foo1() {
      console.log('a = ', a);  // 结果为 a = 0
    }
    console.log('a = ', a);  // 结果为 a = 0
    // --------------
    function foo2() {
      var b = 10;  // 局部变量b
      console.log('a = ', a);  // 结果为 a = 0
      console.log('b = ', b);  // 结果为 b = 10
    }
    // console.log('b = ', b)  // 打开注释后报错结果为 Uncaught ReferenceError: b is not defined
    
    foo1();
    foo2();
    

    二、 闭包

    理解上面的变量作用域,下面我们看看,怎么在函数的外面获得函数内部变量。

    function foo1() {
      var a = 20;
      // 闭包函数foo2
      function foo2() {
        console.log('a = ', a);
        return a;
      }
      return foo2;
    }
    var b = foo1()();  // a = 20
    console.log(b);  // 20
    

    foo1包含着一个函数foo2,foo2就是一个闭包。在我看来,闭包就是一个函数,这个函数在另一个函数体内部,并且向父函数的外部,返回父函数内部的变量。闭包函数是父函数内部变量与外界的桥梁。

    三、闭包的用途

    1. 可以用来读取函数内部的变量。
    2. 可以将变量保存在内存中,不被垃圾回收机制回收。

    四、闭包的优缺点

    优点:可以在函数外部操作函数内部变量。
    缺点:由于闭包会让函数体内变量常驻内存,滥用闭包会导致内存泄露,影响性能。

    原文作者:最帅的坏兔子
    技术博客:https://www.jianshu.com/u/259b7db6cc20
    90后,爱编程,爱运营,文艺与代码齐飞,魅力与智慧共存的全栈开发一枚。
    坚持总结工作中遇到的技术问题,坚持记录工作中所思所见,可以加小编微信一起交流学习:hxa2wangting13815。

    相关文章

      网友评论

          本文标题:我理解的闭包

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