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

  }

};

javascript 闭包,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。