JavaScript闭包(closure)入门: 拿"开发部"和"技术牛"举个例子
虽然只是一小段菜鸟的学习笔记 , 不过还是希望看到的高手看到不足的时候帮忙指点~
一:代码和执行过程
/**
* 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)入门: 拿"开发部"和"技术牛"举个例子的更多相关文章
- JavaScript闭包(Closure)
JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...
- 深入理解JavaScript闭包(closure)
最近在网上查阅了不少javascript闭包(closure)相关的资料,写的大多是非常的学术和专业.对于初学者来说别说理解闭包了,就连文字叙述都很难看懂.撰写此文的目的就是用最通俗的文字揭开Java ...
- [转载]学习Javascript闭包(Closure)
学习Javascript闭包(Closure) 源地址: http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures ...
- javascript 闭包(closure)
<script type="text/javascript"> //闭包(closure):内层函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经结束 ...
- JavaScript 10分钟入门
JavaScript 10分钟入门 随着公司内部技术分享(JS进阶)投票的失利,先译一篇不错的JS入门博文,方便不太了解JS的童鞋快速学习和掌握这门神奇的语言. 以下为译文,原文地址:http://w ...
- JavaScript闭包(二)——作用
一.延迟调用 当在一段代码中使用 setTimeout 时,要将一个函数的引用作为它的第一个参数,而将以毫秒表示的时间值作为第二个参数. 但是,传递函数引用的同时无法为计划执行的函数提供参数.可以在代 ...
- JavaScript闭包(一)——实现
闭包的官方的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 通俗点的说法是: 从理论角度:所有的函数.因为它们都在创建的时候就将上层上下文 ...
- JavaScript闭包——实现
闭包的官方的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 通俗点的说法是: 从理论角度:所有的函数.因为它们都在创建的时候就将上层上下文 ...
- JavaScript学习总结(十六)——Javascript闭包(Closure)
原文地址: http://www.cnblogs.com/xdp-gacl/p/3703876.html 闭包(closure)是Javascript语言的一个难点,也是它的特色, 很多高级应用都要依 ...
随机推荐
- MySQL分组数据
分组 理解分组能够看例如以下一个样例,首先我们打印出products表例如以下 从上面的表中能够看出.每一个vendor都有若干个产品,那么怎么一次统计每一个vendor有多少个产品呢? 这里就能够使 ...
- IT该忍者神龟Instant client required
pply OS : Windows, Mac, Linux Apply Navicat Product : Navicat for Oracle, Navicat Premium Apply Navi ...
- C#中结构与类的区别
一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...
- Java进阶04 RTTI
链接地址:http://www.cnblogs.com/vamei/archive/2013/04/14/3013985.html 作者:Vamei 出处:http://www.cnblogs.com ...
- linux下Python网络编程框架-Twisted安装
Twisted是python下的用来进行网络服务和应用程序编程的框架,安装Twisted前需要系统预先安装有python. 一.安装Twisted http://twistedmatrix.com/R ...
- SQLite数据库框架ORMLite与GreenDao的简单比较
笔记摘要:最近准备使用数据库做个缓存,以前因为项目中的实时性要求比较高,所以在整体的框架中就没有加缓存,有些地方只 是简单的将对象保存到了Preference中,所以并没有对数据库方面有所研究,既然准 ...
- android中获取 bitmap 像素的颜色 之吸管取色功能
本功能是参考android API colorPickerView修改,实现类似与PS中吸管取色功能.也就是可以对图片的任意位置取该位置的RGB.本demo中,完成了色盘取色功能.当点击色盘的某个位置 ...
- PHP - 使用 Pear 进行安装和卸载包
安装: 首先运行到php根目录: 输入要安装的包文件名: 使用语法: pear install 要安装包的名称 回车确认: 如果没有其他意外,显示安装成功. 查看安装的包的信息: 语句: pear i ...
- Eclipse用法和技巧二十六:浅谈快捷键
网络上到处都是eclipse有哪些常用的快捷键,其中还有很多讲得着实不错,这里就不再狗尾续貂而是谈谈别的这段时间的一些思考.最近加入了开发团队,代码量突突的上去了,同时也发现关于快捷键还是有很多细节, ...
- 用 Eclipse 下载 Git 仓库中代码
1. 安装 Git 插件 可以按照 通过Eclipse从subversion站点下载源码 中的方法安装,也可以在 Eclipse Marketplace 中搜索 EGit 进行安装(Help --&g ...