闭包到底是什么???
来源:互联网 发布:zepto.js 左右滑动 编辑:程序博客网 时间:2024/04/29 17:28
从学js以来,闭包就一直困扰着我,今天总算是搞懂了,写篇博客记录一下。
闭包的定义是:闭包是指有权访问另一个函数作用域中的变量的函数。
简单来说,就是一个函数,它可以访问它的包含函数的变量。
作用域链与闭包息息相关。为什么这么说呢,因为闭包的标识符解析是要沿着作用域链找上去的。
创建闭包的常见方式就是在一个函数中创建另一个函数,里面新创建的这个函数就是一个闭包。举个栗子:
function f() { var fff = "fff"; return function(){ alert(fff); }}
var x = f();f = null;x(); //"fff"
根据闭包的定义来讲,内部匿名函数可以访问包含函数内的所有变量,这是没问题的。容易让人产生疑问的是:明明在调用x函数之前我已经又将f函数设置为null了,为什么x函数还可以访问到原f内的fff变量呢?
这是因为:f函数返回后,f的作用域链确实会被销毁,但它的活动对象仍会留在内存中,不会被销毁,因为匿名函数的作用域链仍然在引用这个函数。直到匿名函数被销毁后,f的活动对象才会被销毁。这才导致了x函数仍可引用f函数内的变量。
最后总结一下闭包:通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,当函数返回了一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。
0 0
- 闭包到底是什么???
- JavaScript的闭包到底是什么
- 闭包函数到底是什么?有什么用?
- 到底什么是闭包
- 到底是什么
- js闭包是什么?
- 闭包是什么
- js闭包是什么?
- 闭包是什么?
- javascript-闭包是什么
- 到底什么才是闭包
- JavaScript 闭包究竟是什么JavaScript 闭包究竟是什么
- JavaScript 闭包究竟是什么
- JavaScript 闭包究竟是什么
- JavaScript 闭包究竟是什么
- JavaScript 闭包究竟是什么
- JavaScript 闭包究竟是什么
- JavaScript 闭包究竟是什么
- 28个linux命令行神器
- 前m大的数
- 结合盒子模型,发布一张你的卡片
- zzuli 2126: tmk买礼物(模拟)
- 编程能力训练 —— 1st C++习题:输入3个数求最大值
- 闭包到底是什么???
- Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization论文理解
- 【C++】循环删除vector等容器内的元素
- [IMWeb训练营作业]基于Vue的小demo--toodolist
- unity UGUI Button 点击之后按空格还是会触发点击事件
- 创建Employee类,在类中定义三个属性:编号,姓名,年龄,然后在构造方法里初始化这三个属性,最后载实现接口中的定义的CompareTo方法,将对象按编号升序排列。根据已有的代码,补全程序。
- spark平台 mllib K-Means聚类算法 实现
- 基于Java语言的安卓编程之二十三文件读写(下)
- 整数中1出现的次数