美文网首页js
2018-07-17——了解一下JS闭包

2018-07-17——了解一下JS闭包

作者: zoneccc | 来源:发表于2018-07-17 16:15 被阅读125次

           今天心情还可以,回顾一下JS的闭包知识。掌握闭包,我个人觉得弄清楚以下几个问题就差不多了:

    • 什么是闭包?
    • 什么是JS闭包?
    • JS闭包的适用场景有哪些?
    • 有什么缺陷?
    闭包的概念

           从字面意思来理解就是封闭和包裹,换句话说,就是在函数内部定义的变量,在函数的外部无法访问到,因此就说函数构成了一个闭包。说白了闭包是作用域的应用。
           计算机科学中对闭包的定义为:一个函数的函数体以及函数所处的环境,构成的一个综合体叫做闭包,函数体就是函数内部的代码,函数所处的环境指的就是作用域。

    JS闭包

           引用MDN上的解释:闭包是一种特殊的对象。它由两部分构成:函数,以及创建该函数的环境。环境由闭包创建时在作用域中的任何局部变量组成。
           听起来云里雾里吧,网上找了好多资料,每个人对闭包的定义也不一样,搞得我也不知道怎么去定义闭包了,所以干脆不去定义了,意会吧。
           我觉得创建闭包最常见方式,就是在一个函数内部创建另一个函数。下面例子中的 closure 就是一个闭包:

    function func(){
      var a = 1,b = 2;
      
      function closure(){
        return a+b;
      }
      return closure;
    }
    

           闭包的作用域链包含着它自己的作用域,以及包含它的函数的作用域和全局作用域

    JS闭包的适用场景

           以下3点是闭包最基本的应用场景,很多经典案例都源于此:

    • 1.保护函数内的变量安全
    • 2.在内存中维持一个变量
    • 3.通过保护变量的安全实现JS私有属性和私有方法(不能被外部访问)

    实际场景:

    闭包带来的缺陷!

           技术跟人一样,总有长处和短处,在做到扬长避短之前,就要做到知己知彼,百战不殆!

    • 闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。
    • 如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。

    相关文章

      网友评论

        本文标题:2018-07-17——了解一下JS闭包

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