JavaScript闭包(closure)入门: 拿"开发部"和"技术牛"举个例子
来源:互联网 发布:美图秀秀mac 编辑:程序博客网 时间:2024/06/11 08:24
虽然只是一小段菜鸟的学习笔记 , 不过还是希望看到的高手看到不足的时候帮忙指点~
一:代码和执行过程
/** * http://blog.csdn.net/ruantao1989 * ==>July6 分析一下最简单的闭包 */function a() { //==>从变量i和对象b的角度来说: 他俩本来是a中的局部变量.如果没有闭包的话,会在a返回后被销毁 var i = 0; function b() { alert( ++i ); //==>b能访问到a中的变量i(作用域内) } return b;//==>1.函数a的返回值,引用自身内部的函数}var c = a();//==>2.此时变量c就是函数a的返回值:函数b()//==>至此,这个简单的闭包构建完成: //1.变量c是对象b或者说函数b的引用(见图); //2.函数a在return给c后理应被销毁,但变量c扔持有a中对象b的引用,所以a不能被销毁//3.变量i属于a,内存中继续生存,并执行其计数的功能//==>3.以下每次调用c(),i都会自加(目前这段代码中也只有这么一种办法能操作i的值)c();c();c();
二:换个通俗说法翻译一下:
起因:
1.对象a是公司里的"开发部" ,里边有技术牛人b 和 和只会记编号的i 俩人.
2.c是公司里最后一个项目,c项目需要"开发部门"的b同学来写代码,公司早就想把"开发部门"处理掉 这个项目完了就都开除
经过:
牛人b开始写c项目中的代码
结果:
1.所以a这个"开发部"托"员工"b的福,还不能被销毁
2."开发部"的数数专员i更是幸运的托b的福能在"开发部"里继续混口饭吃,而且兢兢业业的执行他的工作:数数
最终还是技术男拯救世界( YY一下而已... )
三:举个没return正确的反例
function a() { var i = 10; function b() { alert( ++i ); } //return b; //==>不return b() ,而直接return i return i;}var c = a();alert(c);alert(c);//==>不管打多少次都是i的初始值(每次i都是新变量)
作者:ruantao1989
出处:http://blog.csdn.net/ruantao1989
申明:作者写博是为了总结经验,和交流学习之用。如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
- JavaScript闭包(closure)入门: 拿"开发部"和"技术牛"举个例子
- 举个例子
- classloader举个例子
- Javascript闭包(Closure)
- Javascript--闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- javascript closure 闭包
- Javascript闭包(Closure)
- [Javascript] 闭包 closure
- Javascript闭包(Closure)
- JavaScript闭包(Closure)
- JavaScript中的闭包(Closure)
- C#、Javascript闭包(closure)
- Javascript闭包(Closure)
- Javascript闭包(Closure)
- 理解Javascript闭包(closure)
- javascript闭包(Closure)初探
- JAVA正则表达式 Pattern和Matcher
- POJ题目分类-完整版
- Shell 比较运算
- __int64 与long long 的区别
- apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for
- JavaScript闭包(closure)入门: 拿"开发部"和"技术牛"举个例子
- 凉鞋学 Parse Android Guide(三) 面向 Android 的Parse 云服务
- UNIX环境高级编程——进程控制
- 日语中穿戴动词讲解
- OpenGL&GLSL坑爹的multiple texture
- Java正则表达式实例详解
- 36. 面向对象的LotusScript(八)之继承
- 黑马程序员__JAVA基础加强__高新技术(二)
- c++快捷键大全