对于闭包的理解
时间:2019-10-07
本文章向大家介绍对于闭包的理解,主要包括对于闭包的理解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
---恢复内容开始---
首先得从词法作用域说起
词法作用域就是函数是通过词法区分作用域的。是在定义的位置执行的,而不是在调用的位置执行的。
调用对象和全局对象
调用一个函数时,会将其作用域设置为其起作用的作用域链,并且在该作用域链前添加一个调用对象。
作为闭包的嵌入函数
想象一个嵌套在函数f里的函数g,f被调用时,其作用域包含了对f这一调用的调用对象,后边是全局对象。而当g被调用时,因为要回到f中定义g的位置,而g只有f调用时会被定义,也就是f的调用对象是g的定义位置的一部分。。所以g的作用域链包含了g的调用对象、f的调用对象、全局对象
考虑下列代码
1 var x = 0; 2function outer() { 3 x++; 4 if(x == 1) { 5 function inner() { 6 console.log(x); 7 } 8 return inner; 9 } 10} 11 12 var inner = outer(); 13 inner();
为什么能返回1
将outer函数调用并赋予inner,也就是outer中的inner函数给了inner变量,然后调用inner变量,调用后会回到第5行定义inner函数的地方,由于inner的定义是outer调用时执行的,那么outer的调用对象就是定义的位置的一部分,也同时包含了x++语句,即当时定义时的外围的变量的值都是保留着的。此时的x=1,inner函数执行其中语句,开始顺着作用域寻找x的值,找到第3行发现x为1,于是输出打印1.
总结:
闭包虽然是个名词,在javascript中将其描述为将要执行的代码以及这些代码的作用域构成的一个综合体,这个综合体叫做闭包。所有的js函数都叫闭包
但是只有一个函数被导出到它所定义的作用域外时,这种技术才有研究的意义,所以一般都将闭包称为一种一个作用域能够调用读取另一个函数中的变量的现象
---恢复内容结束---
原文地址:https://www.cnblogs.com/BruceChenAndHisBatCave/p/11630422.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python爬虫实战:模拟登录淘宝网站
- Python制作动态二维码(附源码,复制再贴修改路径名字即可)
- 新手小白的福利,零基础也能上手的项目——学生信息管理系统
- Python制作小脚本,一键可以让你同事的电脑在你指定时间关机
- Python小白爬虫入门的第一个案例:爬取全站小说
- Python基础入门知识点——字符串的介绍
- 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决
- 分析B站弹幕,川普同志暴露的那一天,没有一个鬼畜up是无辜的
- python-爬取地理坐标
- Python基础第一个案例:猜数字游戏,这个都写不出,那就放弃吧
- 现在听歌要各大平台到处跑,嫌麻烦?制作个人专属的音乐下载器
- 爬取上市公司数据、分析数据,并用可视化现实全国各地区公司数量
- 今天刚上手爬虫,当然要从最简单的开始啦,验证一下所学的知识
- Python数据可视化入门:使用Matplotlib绘图
- 有了音乐下载器,怎么能没有音乐播放器呢,打造自己的音乐播放器