javascript函数闭包之初体验~~~

今天接到一个面试的电话——淘宝前端,对话大概考察了一下CSS、HTML(HTML5)、原生javascript……的知识。


聊天中又一次被问及javascript闭包相关的内容,这个东东虽然以前也去了解过,但是没怎么理解,加上工作中一般也用不上,所以几乎没什么印象了,了了的回答了几句,对方也好像很不满意,罢了罢了!!!


晚上回来随便查查资料:

文章一:http://www.jb51.net/article/24101.htm

文章二:http://www.cnblogs.com/liyatang/archive/2011/08/05/2128102.html


对闭包的了解大概就是有关“作用域”的问题,因为有时候在局部变量的作用域外部需要访问该变量,通常情况下是做不到的,所以只有变通一下,这个时候“闭包”就出现了。


闭包:javascript闭包就是“局部变量外部可以访问到该变量的函数”,进一步理解,因为只有函数内部的函数才能访问外部函数定义的局部变量,所以可想而知,该函数一定被定义在该局部变量同一函数里面。附上最简单的例子:


	function f1(){
		id = 0;
		function f2(){
			alert(id++);
		}
		return f2;
	}
	
	var result = f1();
	result();


疑问:既然只有函数内部的函数可以访问该变量,那么是不是可以想象为这是函数自动维护的一份变量呢?


结合以前因为想写空间碰到的问题——当我new一个控件对象的时候,它的id该怎么确定唯一呢???这个时候不妨大胆设想一下,控件函数类定义一属性,自动维护不就ok了?


大胆改造代码:(综合粗糙研究过的jquery控件——惭愧)


	var Calendar = (function f1()
	{
		var id = 0;
		function nAdd()
		{
			this.id = id++;
		}
		return nAdd;
	})()
	
	
	var Calendar1 = new Calendar();
	alert(Calendar1.id);
	
	var Calendar2 = new Calendar();
	alert(Calendar2.id);
	
	var Calendar3 = new Calendar();
	alert(Calendar3.id);

这个时候,每次new一个Calendar对象,id都会不同, 大笑……


晚了,该睡觉了。。。


这份代码只是为了记忆一下今天所想到的,其实还是有错误的,你试试为Calendar类添加其他属性?


晚安!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值