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

    1 理解作用域

      1 我们构造一个myObject 对象,它拥有一个value属性和一个increment的方法,假定我们希望保护该值不会被非法更改

       var myObject = function(){

        var value = 0;

        return {

          increment:function(inc){

            value +=typeof inc === "number"?inc:1;

            },

          getValue:function(){

            return value;

            }

        }

      }();//直接执行,返回结果

      我们并没有把一个函数值复制myObject.而是把调用该函数后返回的记过赋值了它。这些方法继续享有访问value变量的特权。

     

     2 var quo = function(status){

      return {

      get_status:function(){

      return status;

    }

    };

    };

    var myQuo = quo("amazed");

    myQuo.get_status();//amazed

    该方法被设计成无须加new来使用,所以名字也没有字母大写。当调用quo时,返回包含get_statsu方法的一个新对象。保存在myQuo中,get_statsu依然享有访问参数本身的权利。

    因为该函数可以访问它被创建时所处的上下文环境,这就被成为闭包。

    get_status方法

    3 再来一个例子

      var add_the_handlers = function(node){

      var i;

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

        node[i].onclick = function(){

          alert(i);

        };

      }

    };

     点击某个栏目弹出提示,结果测试会每次都弹出同一个数值。

    因为每个调用的都是最后的i值。

    修改:

    var add_the_handlers = function(node){

      var i;

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

        node[i].onclick = function(i){

          return function(e){

            alert(i);

          };

        }(i);

      }

    };

  • 相关阅读:
    OneProxy与其它数据库中间件的对比
    防御式编程
    google jam 比赛题(设计有问题)
    Python 代码性能优化技巧
    Python性能鸡汤
    如何避免重构带来的危险
    Linux/Unix工具与正则表达式的POSIX规范
    代码抽象层次2
    chinaunix:腾讯面试题
    C++异常处理小例
  • 原文地址:https://www.cnblogs.com/lihaozhou/p/3584703.html
Copyright © 2011-2022 走看看