javascript的闭包

闭包:函数的作用域取决于声明时,而不取决于调用时

实例:闭包计数器

多个人开发js程序,需要一个全局的计数器

多个人的函数共同用一个计数器,计数器一直增长。

 

解决办法:

1.设一个全局变量

     window.cnd=0;

调用 ++window.cnd;(这个办法可行,但是污染了全局变量  -----所以尽量避免使用全局变量)

2.闭包维护一个别人污染不到的变量,做计数器

  

function  counter(){
    var  cnt=0;     //当counter执行完毕后,除了返回的enter函数,谁也碰不到cut 变量
   var enter=function(){
 return ++cnt;
   }
return  enter;
}
var  inc=counter();
alert (inc());

 3.简化(匿名函数)

var cnt=(function(){
var cnt=0;
return function(){
  return ++cnt;
    }
})();
alert(cnt())  ;

 4.jquery的计数器插件形式

$={};
$.cnt=(function(){
 var cat=0;
   return function(){
       return  ++cnt;
   }
})();
alert($cnt());

5.个人的命名空间(把自己的函数和变量全放在一个对象中)

var sly={};
sly.cnt=(function(){

var cat=0;
   return function(){
       return  ++cnt;
   }
})();
alert(sly.cnt());

 

在实际开发中,如何避免全局变量和冲突:

1统一放在一个全局对象上,如jquery->$;

2.每一个人用自己的命名空间

 

后贴一张图:

posted @ 2016-08-04 18:05  石shi  阅读(225)  评论(0编辑  收藏  举报