JS 匿名函数与闭包

Posted on 2013-11-19 08:27  fengqifei  阅读(126)  评论(0)    收藏  举报

/*我们想要的结果是循环显示出0,1,2,3,4*/

function box(){

  var arr = [];

  for (var i=0;i<5;i++){

    return arr[i] = function(){

      return i;

      }

    }

  return arr;

}

var b = box();

for(var i=0;i<5;i++){

  alert(b[i]);//这里中会循环显示5,因为闭包里面的函数并没有执行,要改成return arr[i] = (function(){return i})();

}

 

//创建一个构造函数式的对象

function User(){

  var age = 100;    //注意,在对象中,this.age或者User.age表示这个属性是公共的,而var age是私有的属性,对象实例是不可以访问的。

  var run = function(){

    return "理解中...";

}

}

var user1 = new User();

alert(user1.age);//返回undefined,因为私有的属性是访问不到的。

 

上述情况我们可以给对象添加一个公共接口,如下:

unction User(){

  var age = 100;    

  var run = function(){

    return "理解中...";

}

this.publicRun = (function(){return run()})();//因为publicRun()与run()方法在同一个作用域里面,所以是可以访问的,在实例化的时候直接访问publicRun就可以了。

}