javascript函数式编程--闭包函数1

闭包是一种嵌套函数结构:在一个函数内定义的一个函数或者函数表达式

闭包的必要条件:内部函数应该访问外部函数声明的私有变量、参数或其它内部函数,此时如果外部函数 外 调用这个内部函数于是它就成了闭包函数

函数的功能:设计逻辑结构

闭包:存储和传输数据,即是函数的数据包,这个数据包在函数执行过程中始终处于激活状态,但函数调用返回之后,闭包保存着与函数关联变量的动态联系

使用:

 1.跟踪动态环境中数据的实时变化,并即使存储

function f(){

  var a=1;

 var b=function(){

     return a;//

}

  a++;//继续引用外部函数定义的局部变量a中的值,直到外部函数f()调用返回

return b;

}

var  c=f();

alert(c())  //注意,这里是2,不是1

2.利用闭包存储变量所有的变化值

function  f(x){

     var  a=[];

  for (var i =0;i<x.length;i++){

      var  temp=x[i];

      //a.push(function(){

     //           alert(temp+''+x[i])

       //  })

a.push(

   (function(temp,i){

         return funciton(){

             alert(temp+''+x[i])

            }

       })(temp,i)

)

   }

  return a;

}

function e(){

      var a=f(["a","b","c"]);

     for(var i=0;i<a.length;i++){

      a[i]();

    }

}

 e();

3.利用一个闭包生声明多个闭包

funciton f(x){

     var  temp=x;

     return  function(x){

        temp +=x;

        alert(temp);

     }

}

var  a=f(50)   //生成第一个闭包

var  b=f(100)//生成第二个闭包

a(5)//返回55

b(10)//返回110

4.闭包的双层结构

  function  f(x){

      return  function(){

            return function(){

             return x;

          }

     }

}

var  a=f(5);

var  b=f(5);

alert(a===b)   //false  注意了,说明a和b引用的是不同函数实例

改写成复杂函数表达式,a会等于b

  var  f=function(x){

      var e=function(){return  x;}

      return  funciton(){  return e;}

} (5);

var  a=f();

var  b=f();

alert (a===b)  //true

猜你喜欢

转载自blog.csdn.net/wenmin1987/article/details/82527333