zoukankan      html  css  js  c++  java
  • JavaScript 闭包

    一、闭包是一种特殊的对象,有两部分组成:函数+创建该函数的上下文环境(环境由闭包创建时在作用域中的任何局部变量)

    二、可以使用函数与闭包来构造模块,模块模式(module pattern)一般形式为:

      1)一个定义了私有变量和函数的函数; 2)利用闭包创建可以访问私有变量和函数的特权函数; 3)返回这个特权函数;

    三、闭合的一个常见错误:在循环中创建函数。

    var serial_maker=function(){

       //返回一个用来产生唯一字符串的对象。

         //唯一字符串由两部分组成:前缀+序列号。

         //该对象包含一个设置前缀方法,一个设置序列号的方法,一个产生唯一字符串的方法。

      var prefix='';

      var seq=0;

      return {

        set_prefix:function(p){prefix=String(p);},

        set_seq:function(s){seq=s;},

        gensym:function(){

          var result=prefix+seq;

          seq+=1;

          return result;

        }

      }

    };

    var seqer=serial_marker();

    seqer.set_prefix('Q');

    seqer.set_seq(1000);

    var unique=seqer.gensym();  //unique='Q1000'

    -------------------------------------------------------------

    //错误的例子:

    var add_the_handlers=function(nodes){

      var i;

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

        nodes[i].onclick=function(e){alert(i);}

      }

    }

    //改良后的例子:

    var add_the_handlers=function(nodes){

      var helper=function(i){

        return function(){

          alert(i);

        }

      };

      var i;

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

        nodes[i].onclick=helper(i);

      }

    };

  • 相关阅读:
    Spring Boot WebFlux-02——WebFlux Web CRUD 实践
    Struts2
    spring04
    spring03
    spring02
    jQuery04
    spring01
    jQuery03
    Linux学习笔记《六》
    请求报错:“应以Content-Type: application/x-www-form-urlencoded为请求类型,在form表单中提交登录信息。"
  • 原文地址:https://www.cnblogs.com/null2/p/3560275.html
Copyright © 2011-2022 走看看