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语言的一个难点,也是它的特色, 很多高级应用都要依 ...
随机推荐
- ORACLE存储过程笔记1
ORACLE存储过程笔记1 一.基本语法(以及与informix的比较) create [or replace] procedure procedure_name (varible {IN|OUT ...
- Genymotion Unable to create Virtual Device:Connection timeout
1.进入C:\Users\[UserName]\AppData\Local\Genymobile,打开genymotion.log,找到最后几句话: 九月 2 14:29:45 [Genymo ...
- HDU2191:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)
Problem Description 急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品 ...
- 基于visual Studio2013解决C语言竞赛题之0803报数
题目
- C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLT ...
- URAL 1792. Hamming Code (枚举)
1792. Hamming Code Time limit: 1.0 second Memory limit: 64 MB Let us consider four disks intersectin ...
- SDUT 2860-生日Party(BFS)
生日Party Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描写叙述 Sherlock的生日即将来临,Sherlock打算邀请几个好 ...
- android如何用adb shell启动应用程序
昨天研究了很久,可能由于基础比较菜吧,所以,没有搜到一个可以直接解决问题的,需要综合几个之后,问题得以解决,记下方法,为了方便自己之后遇到同样问题,也为了方便搜索同样问题的朋友. 主要用到了aapt和 ...
- SLF4J warning or error messages and their meanings(转)
The method o.a.commons.logging.impl.SLF4FLogFactory#release was invoked. Given the structure of the ...
- 怎样学好C++语言
昨天写了一篇怎样学好C语言,就有人回复问我怎样学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家实用.首先,由于怎样学好C语言中谈到了算法和系统,所以这里就仅仅谈C++语言. C++是最难 ...