首页 > 编程语言 >JavaScript闭包详细讨论

JavaScript闭包详细讨论

时间:2022-11-13 14:45:42浏览次数:43  
标签:闭包 function cnt return JavaScript t2 t1 详细 var

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

相关文章