关闭

闭包解惑

标签: 闭包
333人阅读 评论(0) 收藏 举报
分类:

闭包,是指有权限访问另一个函数的作用域中的变量的函数。

创建闭包的常见方式,就是在一个函数内部创建另一个函数,如下面例子

//全局变量clickNum
var clickNum = 10;

function createClickMe(){
	//函数createClickMe作用域的变量clickNum
	var clickNum = 0;
	return function(){
         alert(clickNum);
            clickNum += 1;
        };
}

var clickMe = createClickMe();


如上例,函数createClickMe内部创建了一个匿名函数并返回值就是一个函数。

即使匿名函数被返回了,但在其他地方调用时,它仍然可以访问变量clickNum,之所以能够访问clickNum,是因为内部的匿名函数的作用域也包含外部函数createClickMe的作用域,或者说是作用链,匿名函数主体的活动对象是第一位的,外部函数的活动对象处于第二位。。。直到作用域链的终点是全局执行环境。

正是闭包的这一特性,当你执行clickMe()时,是从0开始,弹出0,1,2,3。。的结果,而不会从10开始,因为匿名函数首先看主体的作用域有没变量clickNum,没有往外部函数找,外部函数的作用域有变量clickNum,则使用外部函数的clickNum变量了。

0
0
查看评论

闭包解惑

javascript深入理解js闭包 作者: 字体:[增加 减小] 类型:转载 时间:2010-07-03 我要评论 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量的作用域 要理解闭包...
  • Franklin_hemm_2012
  • Franklin_hemm_2012
  • 2016-03-06 18:08
  • 101

【SQL解惑】谜题15:找出最近两次工资

解惑一: 1、创建表和插入数据 create table Salaries ( emp_name char(10) not null, sal_date date not null, ...
  • jjjraddit
  • jjjraddit
  • 2017-12-12 22:46
  • 131

JS解惑--闭包

一、变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域。 变量的作用域无非就是两种:全局变量和局部变量。 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。   var n=999;   function f1(){...
  • lxl710450053
  • lxl710450053
  • 2017-04-30 19:41
  • 105

书稿《C++释难解惑》(C++130个问题)已上传到CSDN,欢迎下载

我已经将我与陈翼男博士合写的的书稿《C++释难解惑》上传到CSDN,欢迎朋友们下载。 我做过10年程序员,在大学教过15年书,对C++内部机制有较深入的理解。陈翼男博士在飞利浦亚洲研究院有较多的编程实践,很有心得。本书能帮您解决C++的许多疑惑,并让您学到实际编程的许多经验。本书尚未出版,先放...
  • chenshuzhenteacher
  • chenshuzhenteacher
  • 2012-12-01 12:07
  • 2387

解惑叮咛语 妙莲老和尚开示问答

 认识老和尚广开如意门提升道人心启发般若慧这是灵岩丛书中首创以问答方式呈现的开示,一百二十个绝问妙答,解除你一生的疑惑,阅后如饮甘露妙药,即得佛法清凉自在。 ‘如何避免一家人生离死别?’‘钱被骗了怎么办?’‘为什么你做生意会常失败?’‘你知道不用花钱就可以消灾免难吗?’‘要怎样才...
  • it_hefa
  • it_hefa
  • 2006-08-18 17:00
  • 2647

《Java解惑》读书笔记

 摘选自《Java解惑》一书,之前整理了部分,一直没看完,最近为了督促自己每天读点这本书,决定一天至少更新一个谜题的内容,欢迎讨论。 欢迎关注技术博客http://blog.sina.com.cn/u/1822488043 Java解惑读书笔记 谜题1:奇数性 取余操作的定义:...
  • mxlmhgzw
  • mxlmhgzw
  • 2015-08-17 23:54
  • 1917

Android_Binder 解惑

写在前面 网上的关于Binder的分析非常多,由于Binder在Android系统中即关键又复杂,所以Binder的学习比较困难。写这篇博客是记录在学习Binder过程中遇到的一些比较难以理解的地方。如果你还没有了解过Binder,推荐先看看以下这几篇文章: Android深入浅出之Binder...
  • qq_16841083
  • qq_16841083
  • 2017-07-26 00:30
  • 103

java volatile关键字解惑

前言看着上一篇的更新时间,发现已经挺长时间没有提笔了,只能以忙为自己开脱了,如果太闲都不好意思说自己是程序猿了,正好今天有人问了我一个问题: 当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“, 这里的”保证“ 是如何做到的?和 JIT的具体编译后的CPU指令相关吧? 最一...
  • z3881006
  • z3881006
  • 2017-12-27 17:09
  • 50

《java解惑》读书笔记8——更多类谜题

1.变量隐藏: 问题: 猜猜下面的小程序打印结果应该是什么: class Base{ public String className = "Base"; } class Derived extends Base{ private String className...
  • chjttony
  • chjttony
  • 2014-03-04 17:13
  • 2037

传智人,传道授业解惑的践行者

教师节刚过,不管是幼儿园还是大学都掀起了一阵尊师重教的热风,席卷整个社会。尊师重教是中国的优良传统,早在公元前11世纪的西周时期就提出“弟子事师,敬同于父”。古代大教育家孔子更是留下了“有教无类”、“温故而知新”、“学而时习之”等一系列至理名言。传道授业解惑的教师被中国人誉为人类灵魂的工程师。
  • itcast_cn
  • itcast_cn
  • 2015-09-14 11:56
  • 771
    个人资料
    • 访问:149694次
    • 积分:3236
    • 等级:
    • 排名:第12119名
    • 原创:172篇
    • 转载:34篇
    • 译文:2篇
    • 评论:16条
    文章分类
    最新评论