关于闭包的理解(JS学习小结)
前言:
啊啊啊,看书真的很痛苦啊,还是好想做项目写代码才有意思,不过我现在缺的确是将知识体系化,所以不论看书多么痛苦都一定要坚持坚持啊,这才是我现在最需要的进步的地方,加油!
因为现在期末啦,下周一也就是明天开始就有考试,所以复习是主要的事情,看书的速度比较慢了,一周大概也就184页(P110-P284), 虽然页数比较少但是其中有ES中非常最重要的两个概念——原型链和闭包,之前对于两个知识的了解算是知其然不知其所以然的,所以在那两章我也有意多花费了时间,确保我能够吃透这个概念。以下算是我自己的一些理解,如果有不很正确的地方,希望大神们多多指教,康桑阿米达~
哦,对了,我看的JS书是《Javascript 高级程序设计(第3版)》,如果有正在看这本书的小伙伴可以一起哇~大家多多交流,互相学习嘛~
正文:
现在最流行的编程语言里面一定有“对象”的概念,我们的第一节实验课老师就叫我们怎么找对象,所以可见对象对于程序猿的重要性,所以你有对象了嘛?:) 那这世界上对象千千万,我们怎么知道哪个对象合适呢?总不能一个一个的相处试试看吧?好在我们发现很多对象都有相似之处,所以我们将他们相似的部分抽象出来,形成了一个全新的概念,在我们需要的时候,比对我们的需要和这个概念,再进行选择,就会节省我们很多功夫并更好更快的获得我们想要的结果。而这个概念在JS中就是引用类型,Object(JS中没有类的概念,如果学过C++或者Java、C#等语言的,那也会很容易就对应get到JS中引用类型的)。Object确实是JS中非常强大的部分,但却不是最有意思的,那最有意思的是什么?Function。
在JS中,Function也是一个Object的一个对象。而关于这个概念的延伸,像是继承、原型链等等就又可以再开一把了,如果实在是饥渴难耐的,那就快去搜索大神们博客或者找一本《JavaScript高级程序设计》和我一起学习啦~所以,我们现在就将矛头对准,闭包!开火,嘣嘣嘣嘣
在说闭包的概念之前,我们总得知道这个名词到底是什么意思吧?
所以什么是闭包?函数。
既然就是函数为什么又特别要取个名字?它到底特别在哪?
能够访问另一个函数作用域中的变量。(此处的作用域姑且理解为{}之内)
For example,上个例子就知道了,不要问我例子是谁
function outerFunc(arg){
return function innerFunc(){
alert(arg);
}
}
此处名为outerFunc的函数返回了一个名为innerFunc函数,这个函数在内部只有一句“alert(arg);”,可是运用技能一眼看穿法,找不到arg,再往上,哇哦,在outerFunc的参数那找到了呢,真开心。所以这个innerFunc(函数)访问了outerFunc(另一个函数)作用域内(在outerFunc的{}中,但没在innerFunc的{}中)的变量(arg),所以这个innerFunc就是一个闭包。(大多数时候,不会为闭包命名,此处只为更好的说明。)
OK,闭包的概念知道啦,那如何形成闭包这个现象的呢?显然刚刚别有深意,欲拒还迎的作用域使的小把戏啦,别怕,我们立马拿下。
“当某个函数被调用时,会创建一个执行环境及相应的作用域链。”
“每个执行环境都有一个表示变量的对象——变量对象。(variable object)。”
当然还是要先名词解释,要是都不知道这个名词指的什么,那还怎么玩。
作用域:也就是变量对象的别称。
作用域链:就是作用域和链呗。一条把作用域像腊肉穿起来的链子。它只是一条链子所以作用域链就只保存着变量对象的地址,而不是变量对象本身。
执行环境:执行环境指向自己独有的作用域链,作用域链又按照当前函数作用域,外部函数作用域,外部函数的外部函数作用域....直至全局作用域。
function outerFunc(arg){
return function innerFunc(){
alert(arg);
}
}
var result = outerFunc(1); //返回innerFunc函数
result(); //输出1
还是刚才的函数,还是原来的配方,再加点料,看看效果。
关于闭包的理解(JS学习小结)的更多相关文章
- JS学习小结(上)
学而时习之,不亦说乎,开启JS学习新乐章~ JS是干啥的?网页特效,它主要是实现控制结构和样式,是一种行为,有多重要,不言而喻吧,页面炫酷的资本. 1. JS输出: alert("hello ...
- JavaWeb基础—JS学习小结
JavaScript是一种运行在浏览器中的解释型的编程语言 推荐:菜鸟教程一.简介js:javascript是基于对象[哪些基本对象呢]和和事件驱动[哪些主要事件呢]的语言,应用在客户端(注意与面向对 ...
- React.js学习小结
最近一段时间都在学习React.js,感觉还不错,现在把自己的一些学习笔记记录一下,留着以后学习查看. 0.React全家桶(技术栈) 1.React主体 2.WebPack:grunt.gulp自动 ...
- 【学习笔记】深入理解js原型和闭包(0)——目录
文章转载:https://www.cnblogs.com/wangfupeng1988/p/4001284.html 说明: 本篇文章一共16篇章,外加两篇后补的和一篇自己后来添加的学习笔记,一共19 ...
- 【学习笔记】深入理解js原型和闭包(16)——完结
之前一共用15篇文章,把javascript的原型和闭包讲解了一下. 首先,javascript本来就“不容易学”.不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学javascrip ...
- 【学习笔记】深入理解js闭包
本文转载: 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接 ...
- 【学习笔记】深入理解js原型和闭包系列学习笔记——精华
深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨 不是object呢,js为何要对函数做这样的区分 ...
- 【学习笔记】深入理解js原型和闭包(18)——补充:上下文环境和作用域的关系
本系列用了大量的篇幅讲解了上下文环境和作用域,有些人反映这两个是一回儿事.本文就用一个小例子来说明一下,作用域和上下文环境绝对不是一回事儿. 再说明之前,咱们先用简单的语言来概括一下这两个的区别. 0 ...
- 【学习笔记】深入理解js原型和闭包(17)——补this
本文对<深入理解js原型和闭包(10)——this>一篇进行补充,原文链接:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中, ...
随机推荐
- SQL Server(七)——存储过程
一.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需要大量T-SQ ...
- NOSQL(一)--Redis
简介 最近开始接触NoSQL,翻译过来就是 not only sql,非关系型数据库吧. 其中主要有四大类NoSQL,今天我们介绍其中的一种键值对的NoSQL:Redis. 定义:Redis是一个开源 ...
- mod_PHP&fastcgi
从宏观上来看,PHP内核的实现与世界上绝大多数的程序一样,接收输入数据, 做相应处理然后输出(返回)结果. 我们编写的代码就是PHP接收的输入数据,PHP内核对我们编写的代码进行解释和运算, 最后返回 ...
- 编写一个Java应用程序,该应用程序包括2个类:Print类和主类E。Print 类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的 立方和等于这个三位数本身,如: 371 = 33 + 73 + 13。)在主类E的main方法中来 测试类Print
package zuoye; public class print { void output() { System.out.println("100-999之间的水仙花数是:") ...
- cocos2d之z轴位置示例
1:设置资源本地z轴位置 2:调整位置示例 3:调整两个资源为同一父节点 4:ImageView 设置资源,此赋值方法第一个为资源路径
- iOS极光推送,两次Bundleid不一致( 开发证书没有通过验证 是否重新上传证书)的解决方案
极光在配置ios端推送时,需要上传p12证书,如果遇到如下图:: 证书上传未通过的原因一般有: 1.当前上传的p12证书密码输入有误: 2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候 ...
- Android Paint类方法说明
* Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类, ...
- Linux 下安装配置 JDK
JDK 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/index.html 按照自己的情况选择不同的版本下载 cd /usr ...
- 【CSS】理解CSS
CSS(Cascading Style Sheet,层叠样式表),及其精巧且富有表达力,开发者可以用最为高效的方式高度掌控网页内容的表示. 1. 盒模型 CSS中的一个基本概念是盒模型(box mod ...
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...