函数式编程(3)

 一. 闭包:理解(1):就是一个函数,捕获作用域内的外部绑定(例如:不是自己的参数)。这些绑定是为之后使用(即使在该作用域已结束)而定义的。(不用var的变量是全局变量)

              理解(2):闭包就是能够读取其他函数内部变量的函数(定义在一个函数内部的函数)。

  (1)变量的作用域有两种:全局变量和局部变量;

由于在函数内部可以读取外面的全局变量,而外部的全局变量,不能读取内部的局部变量,所以就需要方法来实现。

例如:

function f1(){
   var n=999;
    return function f2(){
      return n;
    }
  }
  var result=f1();
// 999
由于要在外面得到发f1()里面的变量n,能从内部实现闭包进行得到。所以f2()就是上面说的闭包。 

  (2)闭包的用途:1、可以读取函数内的变量。2、就是让这些变量始终保存在内存中。

例如:

function f1(){
    var n=999;
    nAdd=function(){n+=1}
    return function f2(){
      console.log(n);
    }
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); //1000
通过这个可以看出f1()中的变量n,一直保存在内存中。不会被垃圾回收机制回收 

  (3)闭包的缺点:通过闭包使用的函数变量会一直保存在内存中,这样就会造成内存消耗很大,从而影响远行速率。所以要适当的使用闭包。

猜你喜欢

转载自975156298.iteye.com/blog/2301560