javascript函数式编程--闭包2:比较闭包函数和调用对象/保护闭包数据的独立性(li事件函数)

函数和对象都是复杂的引用数据类型。

函数的私有变量和对象的属性相似,私有变量其实就是函数调用对象的属性

函数有可执行的环境(上下文环境),对外不可见

对象的上下文是静态的,对外是可见的

如果说对象是数据存储结构,那么函数就是代码执行空间,对象更像仓库,函数则更像加工车间

函数:

      function  f(){ //  函数结构

                  var  a=1 ;    //函数局部变量

                 var b=funciton(){  //函数内部的方法

                               retrun a

                        }

}

对象:

      o={   //     对象结构

               a:1  ,      //对象属性

               b:function(){  //对象属性

                          return a

                         }

          }

保护闭包数据的独立性

  在一个循环结构中通过闭包来自动更改一个数组内所有元素的值(li点击事件)

    var a=[1,2,3];

for  ( i in a){

    a[i]=function(i){

         return  function(){

            return   i*i 

    }

   }(i)

}

多一层闭包将增加内存的消耗,每次遍历中,多定义的闭包结构都属于不同的函数实例,既然属于不同的结构体,我们可以把这个局部变量值交给函数实例自己保存,从而减少一层闭包,减轻系统负担

var a=[1,2,3];

for ( i in a){

   a[i]=function(){

     var  i=arguments.calle.value; //  获取匿名函数的属性value值

      return i*i;

   }

  a[i].value=i;//设置匿名函数的属性value值 为局部变量i

}

 for(i in o){ o[i].onclick=function(){}}//事件属性赋值必须使用闭包

猜你喜欢

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