如何理解和应用闭包
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,何为闭包函数内部又定义了一个函数,这个子函数就可以称为闭包。闭包的特点闭包的一个特点就是闭包内部可以引用外部函数的变量。原理要理解闭包的原理,最重要的是要理解JavaScript的作用域链机制。作用域
千家信息网最后更新 2025年01月19日如何理解和应用闭包
何为闭包
函数内部又定义了一个函数,这个子函数就可以称为闭包。
闭包的特点
闭包的一个特点就是闭包内部可以引用外部函数的变量。
原理
要理解闭包的原理,最重要的是要理解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安全错误
数据库的锁怎样保障安全
软件开发公司项目合作
网络安全宣传语小学
宥马运动软件开发者
php 数据库连接失败怎么办
景区网络安全管理手册
慧通网络技术有限公司
qq的数据库在哪儿
火车上的数据库
海南电商软件开发外包
数据库技术与应用 课程介绍
聊城市技能大赛网络安全
智能网络技术 目标
如何查询大数据库的使用情况
将数据存到数据库 安卓开发
电网网络安全标题
大型项目数据库
mc服务器删除玩家
去俄罗斯做软件开发
ftp服务器断开
四川数据软件开发推广
网络安全薪水一般多少在县城
图书馆数据库等级设计
大数据时代网络安全分析
sql从其他表中取数据库
三级网络技术 指令
江宁区智能化软件开发
软件开发学习什么好呢
监控数据库一张表
多台服务器加入ad域
网络安全攻防大赛解析