function t1() {
var age = 20;
function t2() {
alert(age);
}
return t2;
}
在js中,t1执行过程中,又生成了t2,而从作用域上来说t2能访问到age=20, 返回t2时, 于是"age = 20"没有消失,而是返回t1函数形成一个包,这个包属于t2, 所以叫做闭包。
函数的作用域取决于声明时候, 而不取决于调用时。
/*
闭包计数器, 多个人开发js程序,需要开发一个全局的计数器
多个函数共用一个计数器, 计数器一直增长
window.cnt = 0;
++window.cnt
这个办法可行, 但是污染了全局变量
2.闭包来维护一个别人污染不到的计数器
*/
function counter() {
var i = 0; //当couter执行完毕之后, 除了返回的cnter函数, 谁也别想碰到cnt变量了
var t1 = function () {
return ++i;
}
return t1;
}
var inc = counter();
alert(inc());
alert(inc());
第二版本简化
var cnt = (function () {
var cnt = 0;
return function() {
return ++cnt;
}
})();
第三个版本
//统一放在一个全局对象上, 如jquery->$
//每人都用自已的命名空间
$ = {};
$.cnt = (function () {
var cnt = 0;
return function() {
return ++cnt;
}
})();
alert()
//个人命名空间,在团队开发中是非常容易见到的
//其实就是将自已的变量,函数放在一个对象中
//跟团队说清楚这是我的空间, 别人就不要再次使用了
var Y18 = {};
Y18.cnt = (function () {
var cnt = 0;
return function() {
return ++cnt;
})();
标签:闭包,function,cnt,return,JavaScript,t2,t1,详细,var
From: https://www.cnblogs.com/zhengel/p/16885912.html