今天接到一个面试的电话——淘宝前端,对话大概考察了一下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);
晚了,该睡觉了。。。
这份代码只是为了记忆一下今天所想到的,其实还是有错误的,你试试为Calendar类添加其他属性?
晚安!