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.每一个人用自己的命名空间
后贴一张图: