关于JS-闭包概念的好文章
2015-06-24 11:44
411 查看
读书笔记:
1、闭包使用动机:
1):将函数的内部变量暴露出来;
2):将函数内部变量驻留在内存中。
2、闭包使用方式:
1)使用函数体内部的全局变量和匿名函数
2)将内部函数作为返回值,将内部函数(闭包)暴露
3、引用关系为3个+的时候,对象才不会释放,或者会被回收机制回收。
好文推荐:
http://www.jb51.net/article/24101.htm
1、闭包使用动机:
1):将函数的内部变量暴露出来;
2):将函数内部变量驻留在内存中。
2、闭包使用方式:
1)使用函数体内部的全局变量和匿名函数
function Obj(){ var vars = []; //addVar是函数体内的全局变量,匿名方法是闭包(其引用了Obj()方法中的临时变量vars) addVar = function(newVar){ vars.push(newVar); } //readVars是函数体内的全局变量,匿名方法是闭包(其引用了Obj()方法中的临时变量vars) readVars = function(){ alert(vars); } } //Obj()调用后,会初始化函数体内的全局变量addVar和readVars Obj(); addVar("1"); addVar("esdsdg"); readVars();//显示1,esdsdg addVar("fdsafadsf"); readVars();//显示1,esdsdg,fdsafadsf /* 总结: 在全局变量addVar和readVars初始化后,因为addVar和readVars引用了闭包(匿名方法),而 而匿名方法又引用了Obj()方法体内的临时变量。所以,在全局变量addVar和readVars不释放前,Obj()将 不会释放并且临时变量vars将一直驻留在内存中。 */
2)将内部函数作为返回值,将内部函数(闭包)暴露
function newObj(){ var vars = []; //闭包addVar,引用了vars function addVar(newVar){ vars.push(newVar); alert(vars); } //通过返回值的方式将闭包函数暴露 return addVar; } //objRef引用了闭包函数addVar() var objRef = newObj(); objRef("t1");//t1 objRef("t2");//t1,t2 /* 总结: 1、函数通过返回值的方式将闭包函数暴露; 2、bjRef引用了闭包函数addVar(),闭包函数使用newObj()函数中的临时变量vars 3、在bjRef不释放的情况下,newObj()不会被释放 */
3、引用关系为3个+的时候,对象才不会释放,或者会被回收机制回收。
好文推荐:
http://www.jb51.net/article/24101.htm
相关文章推荐
- js查找两个数组中相同的项 filter
- UnderscoreJS
- 怎样调试移动应用中的JavaScript代码
- javascript中的ajax对象(一)
- javascript中对条件判断语句的优化
- JSP页面EL表达式无效的问题
- javascript新手入门必读书籍推荐
- 浏览器和js交互、NPAPI之NPRuntime开发
- 把玩Javascript中的bind
- javascript中ajax
- JS Output
- 浏览器和js交互、NPAPI之NPRuntime开发
- 学习Javascript闭包(Closure)
- Javascript中最常用的55个经典技巧
- JavaScript面对国际化编程时的一些建议
- 推荐 15 个 Angular.js 应用扩展指令(参考应用)
- BZOJ 1449 JSOI2009 球队收益 费用流
- [Token] 从index.jsp中获取Token
- 关于Action向页面传递数据,对传递属性JSON化的拦截。
- $.getJSON( )的使用方法简介