javascript闭包

作者: 前端来入坑 | 来源:发表于2018-12-19 19:25 被阅读112次

    闭包是什么

    • 简单来说闭包就是一个函数里面嵌套另一个函数。

    说的具体点,引用下面参考博客中的解释:即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

    闭包的词法作用域

    • 闭包让javascript拥有自己的私有变量
    var Counter = (function() {
      var privateCounter = 0;
      function changeBy(val) {
        privateCounter += val;
      }
      return {
        increment: function() {
          changeBy(1);
        },
        decrement: function() {
          changeBy(-1);
        },
        value: function() {
          return privateCounter;
        }
      }   
    })();
    
    console.log(Counter.value()); /* logs 0 */
    Counter.increment();
    Counter.increment();
    console.log(Counter.value()); /* logs 2 */
    Counter.decrement();
    console.log(Counter.value()); /* logs 1 */
    

    实用的闭包

    • 闭包很有用,因为它允许将函数与其所操作的某些数据(环境)关联起来。这显然类似于面向对象编程。在面向对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。
    • 因此,通常你使用只有一个方法的对象的地方,都可以使用闭包。

    在写js的时候都会用这样一个匿名自执行函数包裹起来(function(){ })(),就是为了让里面定义的变量成为局部变量,不影响全局的变量。避免使用过多的闭包,可以用let关键词。

    • 闭包与面向对象编程。

    js面向对象之组合继承
    js面向对象的方法
    JavaScript多重继承
    ES6的继承
    面向对象学习网站

    性能考量

    如果不是某些特定任务需要使用闭包,在其它函数中创建函数是不明智的,因为闭包在处理速度和内存消耗方面对脚本性能具有负面影响。

    MDN官网https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

    参考https://www.cnblogs.com/yunfeifei/p/4019504.html

    相关文章

      网友评论

        本文标题:javascript闭包

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