首页 > Web开发 > 详细

javascript 闭包

时间:2014-03-07 16:53:45      阅读:434      评论:0      收藏:0      [点我收藏+]

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);

  }

};

javascript 闭包,布布扣,bubuko.com

javascript 闭包

原文:http://www.cnblogs.com/lihaozhou/p/3584703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!