闭包作用域探究小例

今天一位网友问了一个闭包的问题,做了以下实验如下:

<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>闭包作用域探究</title></head><body><script type="text/javascript">function a(){var i = 0;return function b(){return ++i;}}var c = a();document.write(c()+'<br/>');//1document.write(c()+'<br/>');//2document.write(c()+'<br/>');//3var d = a();document.write(d()+'<br/>');//1document.write(c()+'<br/>');//4</script></body>
</html>

很多人把高级语言的垃圾回收机制用到对闭包的解释中,我觉得如果从作用域的概念来理解闭包可能更容易一些,下面是我从作用域角度来解释上面的实验结果:

1、对于函数(function)我的理解是“你调不调用他都在那里,不离不弃”;

2、每个函数都是个孩子,每个孩子都有个家(就是函数作用域);

3、孩子可以用家里的东西(使用所属作用域的变量和函数,就像 i ,当然可以在 i 所在的位置来定义一些函数供这位孩子b来调用);

4、每家的孩子都只能供这个家来使唤,比如让这孩子叫爸爸(每个作用域,或者每个实体,就像例中的c和d都只能调用自己的b方法);

5、孩子如果打碎了家里的玻璃,那这家的玻璃就碎掉一块,要是再打一次那就又碎掉一块(每调用一次c的b方法,c的 i 就会改变一次);

6、家家有本难念的经,但是各念各的经(调用d 的 b方法改变的是d的 i 的值,不会对c 的 i 的值有影响);

7、每家的孩子在学校都代表这个家庭,但只是代表,除了这个孩子他背后有一个家庭在影响他,孩子的表现很大程度是受家庭环境影响的(当调用 c()时其实是调用a的一个实例(这里就是实例c)的b方法,所以c()的表现是受所在作用域的影响的)

 

 

转载于:https://www.cnblogs.com/longze/archive/2013/05/24/3096527.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android实现圆形圆角图片

本文主要使用两种方法实现图形圆角图片 自定View加上使用Xfermode实现Shader实现 自定View加上使用Xfermode实现 /** * 根据原图和变长绘制圆形图片 * * param source * param min * return */ private Bitmap createCircleImage(Bitmap source, int min) { final Pain…

自动驾驶又陷“派系”之争:该约束行人还是让车更完美

来源&#xff1a;网易智能摘要&#xff1a;近日&#xff0c;全球人工智能专家吴恩达&#xff08;Andrew Ng&#xff09;表示&#xff0c;制造可靠自动驾驶汽车的最快方法是在行人方面采取完善措施&#xff0c;而不单是汽车。他说&#xff1a;“我们想告诉人们的是&#xff0c;请…

AjaxPro新发现-错误处理

当Ajax调用发生错误时,回调函数参数result会存在error属性,通常通过这个属性判断是否出现错误. 也可以使用默认处理函数,这样就可以为错误处理提供统一的函数 转载于:https://www.cnblogs.com/dwfbenben/archive/2013/05/24/3097535.html

Android仿微信界面

效果图 原理介绍 1、先绘制一个颜色&#xff08;例如&#xff1a;粉红&#xff09; 2、设置ModeDST_IN 3、绘制我们这个可爱的小机器人 回答我&#xff0c;显示什么&#xff0c;是不是显示交集&#xff0c;交集是什么&#xff1f;交集是我们的小机器人的非透明区域&#xff…

Google Brain与牛津大学主持最新《计算机视觉前沿》报告(146页PPT)

来源&#xff1a;专知牛津大学DanielaMassiceti, Saumya Jetley与Google Brain Sara Hooker等人9月13日在Deep LearningIndaba 深度学习大会上主持关于《计算机视觉前沿》的报告。重点围绕当前计算机视觉最重要但没有解决的一些问题&#xff0c;以及如何和非洲相关&#xff1f;…

89C52控制1602A液晶的计时器

一、LCD1602A液晶说明。 DataSheet说明&#xff08;技术参数&#xff09; ①此LCD共16个管脚。每个接口说明如下表。 PS&#xff1a;1-2管脚没什么好说的&#xff0c;就是接电源和地的。 3管脚是偏压信号&#xff0c;这一管脚一般可以接个滑动变阻器&#xff0c;通过调节滑动变…

重磅 | 中国工程院提出新一代智能制造

来源&#xff1a;WPR近日&#xff0c;中国工程院院刊《Engineering》推出最新观点性文章“走向新一代智能制造”&#xff0c;作者周济、李培根、周艳红等&#xff0c;文章指出智能制造是一个不断演进发展的大概念&#xff0c;可归纳为三个基本范式&#xff1a;数字化制造、数字…

C# Obsolete

Obsolete 属性将某个程序实体标记为一个建议不再使用的实体。每次使用被标记为已过时的实体时&#xff0c;随后将生成警告或错误&#xff0c;这取决于属性是如何配置的。例如&#xff1a; 上面在Main函数中调用&#xff0c;只产生了一个警告的信息。 如果将MyObsolete类中的Get…

Android之事件分发机制

本文主要包括以下内容 view的事件分发viewGroup的事件分发 首先来看两张图 在执行touch事件时 首先执行dispatchTouchEvent方法&#xff0c;执行事件分发。再执行onInterceptTouchEvent方法&#xff0c;判断是否中断事件&#xff0c;返回true时中断&#xff0c;执行自己的on…

Android屏幕适配总结

重要概念 什么是屏幕尺寸、屏幕分辨率、屏幕像素密度&#xff1f; 什么是dp、dip、dpi、sp、px&#xff1f;他们之间的关系是什么&#xff1f; 什么是mdpi、hdpi、xdpi、xxdpi&#xff1f;如何计算和区分&#xff1f; 在下面的内容中我们将介绍这些概念。 屏幕尺寸 屏幕…

突然开掉CEO!通用电气时隔一年再换帅,金融和工业互联网都救不了GE?

资料来源&#xff1a;GE官网、华尔街见闻、腾讯新闻《一线》物联网智库 整理发布摘要&#xff1a;在统帅了通用仅仅14个月之后&#xff0c;John Flannery就被他的继任者Lawrence Culp取代&#xff0c;而Culp也将立刻走马上任&#xff0c;成为通用电气&#xff08;GE&#xff09…

看,这就是你脱下谷歌眼镜的世界——多乏味!

本文节选自科技博客网站PandoDaily。作者精妙地描述一个十年后由谷歌眼镜主宰你的感观的世界。当你脱下眼镜后&#xff0c;你发现世界如此乏味&#xff0c;你只想赶紧回到由谷歌眼镜向你勾勒的世界中&#xff0c;你也全然不顾这其实已让你丧失了自由意志。非常有趣的一篇文章。…

美法加三位科学家获2018诺贝尔物理学奖

来源&#xff1a;科学网北京时间10月2日下午5时52分&#xff0c;2018年诺贝尔物理学奖揭晓。获奖者为美国科学家阿瑟阿什金&#xff08;Arthur Ashkin&#xff09;、法国科学家热拉尔穆鲁&#xff08;Gerard Mourou&#xff09;和加拿大科学家唐娜斯特里克兰&#xff08;Donna …

Android自定义progressBar

通过继承系统ProgressBar实现 效果图 实现 HorizontalProgressBarWithNumber 自定义属性 <?xml version"1.0" encoding"utf-8"?> <resources><declare-styleable name"HorizontalProgressBarWithNumber"><attr name&…

java调用kettle批量执行

java调用kettle批量执行 之前只做了一个java调用单一ktr的例子&#xff0c;在用web程序控制ETL数据抽取过程的时候&#xff0c;难免会遇到要执行一个复选框列表的ktr&#xff0c;那么前段传过来的就不仅仅是一个ktr&#xff1b;那就是一个未知数目的ktr列表了&#xff0c;思想就…

干货分享:自动驾驶核心技术进展之车用毫米波雷达

来源&#xff1a;智车科技摘要&#xff1a;电动化、智能化、网联化、共享化是汽车未来发展的大势。伴随着这一趋势&#xff0c;自动驾驶汽车应用而生&#xff0c;且国内很多自动驾驶研发企业快速成长。“自动驾驶”等相关热词也一直是行业关注的焦点。为了让中国汽车行业的机构…

Android主题换肤实现

本系列文章主要是对一个Material Design的APP的深度解析&#xff0c;主要包括以下内容 基于Material Design Support Library作为项目整体框架。对应博文&#xff1a;Android Material Design 兼容库的使用详解RecyclerView的万能适配器。对应博文:打造一个RecyclerView的万能…

windows下MBCS和UNICODE编码的转换

1. 从MBCS转到UNICODE 方法a&#xff09; 直接调用windows api char name[100] "大鳄.hxboar";wchar_t wname[100];//setlocale(LC_ALL, "chinese"); int nLen MultiByteToWideChar(CP_ACP, 0,name, -1, NULL, NULL);MultiByteToWideChar(CP_ACP, 0, name…

ShareSDK集成微信、QQ、微博分享

1、前言 为什么要使用第三方的作为集成分享的工具呢&#xff1f;而不去用官方的呢&#xff1f;有什么区别么&#xff1f; 一个字”快”&#xff0c;如果你使用官方的得一个个集成他们的SDK&#xff0c;相信这是一个痛苦的过程。 2、准备需要分享的各个平台的key 这个需要…

开启log4net内部调试

1、在appSettings节点中增加名称为“log4net.Internal.Debug”的节点&#xff0c;并确保值为“true" 1 <configuration> 2 <appSettings> 3 <add key"log4net.Internal.Debug" value"true"/> 4 </appSettings&g…