本文实例讲述了javascript闭包功能与用法。分享给大家供大家参考,具体如下:
理解闭包
闭包这个东西,确实是很麻烦。之前我自己的理解也是有一点误差,所以今天将文章修改修改,争取将自己的理解进一步准确化。
闭包说得通熟易懂一点,就是指有权访问另一个函数作用域的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另外一个函数,并返回。
我们这里举一个例子来说明,首先我们在函数f1内部定义一个函数f2。
function f1(){ var n=999; function f2(){ alert(n); // 999 } }
f2可以访问f1的作用域,反过来就不行了。现在我们想访问f1中的n,在外层却访问不到,怎么办呢?将f2作为f1的返回值就可以了:
function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999
这个就是闭包。
其实也很简单,那么闭包有什么用呢?
闭包的使用
之前的自己只知道闭包的概念,却并不知道其存在的价值和意义。直到自己在项目中遇到类似的问题后,才发现只有闭包才能解决的情况。
闭包是使用可以带来以下好处:
1. 希望一个变量长期驻扎在内存中
2. 避免全局变量的污染
3. 私有成员的存在
我们刚才说到过,闭包可以读取到函数内部的变量,这是由于闭包后函数的堆栈不会释放,也就是说这些值始终保持在内存中。这是一个优点,也是一个缺点。
我们可以通过闭包来实现一个计数器,而不用担心全局变量的污染:
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000
可以看到n一直存储在内存中,并没有在f1调用后被自动清除。
我们再来看看如何通过闭包来模拟JavaScript中的私有成员:
var aaa = (function(){ var a = 1; function bbb(){ a++; alert(a); } function ccc(){ a++; alert(a); } return { b:bbb, //json结构 c:ccc } })(); aaa.b(); //2 aaa.c(); //3
这样就可以提供指定的变量供外界访问了。
闭包解决的问题
这是一个很常见的问题,就是利用javascript处理循环的时候,索引i的值不能有效的利用:
这里改成如下格式,形成10个闭包来解决即可:
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
本文向大家介绍Javascript闭包用法实例分析,包括了Javascript闭包用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了Javascript闭包的概念及用法。分享给大家供大家参考。具体如下: 提到闭包,想必大家都早有耳闻,下面说下我的简单理解。 说实话平时工作中实际手动写闭包的场景并不多,但是项目中用到的第三方框架和组件或多或少用到了闭包。 所以,了解闭包是非常必要的
本文向大家介绍JavaScript闭包与作用域链实例分析,包括了JavaScript闭包与作用域链实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript闭包与作用域链。分享给大家供大家参考,具体如下: 闭包定义 闭包指的是有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数A内部创建另一个函数B,那么函数B就是一个闭包,可以访问函数A作用域中的所
本文向大家介绍JavaScript内置对象math,global功能与用法实例分析,包括了JavaScript内置对象math,global功能与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript内置对象math,global功能与用法。分享给大家供大家参考,具体如下: 学习要点: 1.Global对象 2.Math对象 ECMA-262对内置对象的定义是:“
本文向大家介绍mysql视图功能与用法实例分析,包括了mysql视图功能与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了mysql视图功能与用法。分享给大家供大家参考,具体如下: 通俗的讲,视图就是一条SELECT语句执行后返回的结果集。 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性; 视图与表是一对一关系情况:如果没有其它约束(如视图中没有的字段,在基本表中是
本文向大家介绍MySQL联合索引功能与用法实例分析,包括了MySQL联合索引功能与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了MySQL联合索引功能与用法。分享给大家供大家参考,具体如下: 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a
本文向大家介绍JQuery常用选择器功能与用法实例分析,包括了JQuery常用选择器功能与用法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JQuery常用选择器功能与用法。分享给大家供大家参考,具体如下: JQuery基础回顾 今天对JQuery内容进行了回顾,下面进行一些总结: JQuery是javascript的一个库,所以二者可以相互转换,例如JQuery到Javascr