您的位置:首页 > Web前端 > JavaScript

javascript 闭包

2014-03-06 15:54 218 查看

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

  }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: