如何理解和应用闭包
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,何为闭包函数内部又定义了一个函数,这个子函数就可以称为闭包。闭包的特点闭包的一个特点就是闭包内部可以引用外部函数的变量。原理要理解闭包的原理,最重要的是要理解JavaScript的作用域链机制。作用域
千家信息网最后更新 2025年12月02日如何理解和应用闭包
何为闭包
函数内部又定义了一个函数,这个子函数就可以称为闭包。
闭包的特点
闭包的一个特点就是闭包内部可以引用外部函数的变量。
原理
要理解闭包的原理,最重要的是要理解JavaScript的作用域链机制。
作用域
js中作用域分为两种,全局作用域和函数作用域(局部作用域),此外js遵循的是静态作用域规则。作用域链
由作用域形成的链条就称为作用域链,但这个作用域链存储的是指向各个活动对象的指针。下面我们看下作用域链的具体形成过程:全局作用域是一直存在的,函数作用域只有在执行到它的时候才会生成,当函数被定义时,函数的`scope`属性会存储该函数外部的作用域下的活动对象(指针),包括全局变量对象,所以可能是个指针列表。然后我们在调用函数时,首先会为它创建一个执行环境,然后创建作用域链,这个作用域链先是复制`scope`属性的值,新航道雅思培训然后把自己的活动对象推入作用域链的前端,这个活动对象由该函数作用域下的变量构成,这样函数的作用域链就形成了。
举个栗子:var g = 1;function out(){var out = "out";return function(){ var inner = "inner"; return out;}}示例图
示例图解释了为什么闭包拥有保存外部函数变量的特性
当函数执行完毕,作用域链就会被销毁,之前占用的内存也会被释放,但如果函数内部定义了一个子函数,这个时候子函数的`scope`属性就会存储着指向父函数活动对象的指针,活动对象由于仍被子函数引用,所以不会被销毁,父函数的变量仍旧没有被消除。变量out的值仍旧是"out"。
// 可通过如下代码验证var abc = out();alert(abc());
结果:
闭包的应用
闭包最常用的一个地方就是保留父函数的变量,这个在上面的例子中已经说明
闭包的另一个应用是模拟块级作用域和私有变量,这是应用函数拥有自己的作用域的特点,在不想成为公有变量的变量外报上一层匿名函数并且立即执行
(function(){// 这里是块级作用域})();
总结
闭包虽然看似简单,但它揭示了js作用域链的机制,而且闭包有很多应用场景,如果不看懂它只会越来越懵逼。
作用
函数
闭包
变量
对象
活动
应用
指针
全局
属性
特点
存储
个子
原理
就是
指向
时候
机制
重要
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
用电和网络安全手抄报
山东电脑软件开发要多少钱
dell服务器厂家
西安格睿特互联网科技
软件开发阶段的测试方法
怀旧服测试服务器会回档吗
大数据计算是在数据库
区块链信息网络技术
电视台网络安全应急处置预案
数据库中修改某个字段的长度
php socket服务器
方舟服务器管理员刷龙命令
神马网络技术有限公司
玖二柒互联网科技公司做什么的
网络安全事件报告处置流程
超市如何利用手机软件开发票
不属于网络安全保障措施的是
age动漫服务器在哪里
成都云投城事互联网科技
小型网站用什么数据库
临汾公安局网络安全
我的世界手游租赁服务器身份验证
数据库gui是啥
2011年数据库试题
数据库原理与设计考试
帮趣网络技术有限公司招聘
软件开发差转测试
三国群英传 服务器
学习网络安全的基础书
中国经济社会统计发展数据库