js

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

2018-07-17  本文已影响125人  zoneccc

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

闭包的概念

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

JS闭包

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

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

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

JS闭包的适用场景

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

实际场景:

闭包带来的缺陷!

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

上一篇下一篇

猜你喜欢

热点阅读