JS闭包

闭包是JavaScript中一种强大的特性,允许内部函数访问并保持对外部函数变量的引用。它用于实现数据隐藏,防止全局变量污染,以及持久化变量。通过创建内部函数并返回,闭包可以在函数执行后依然保留其作用域内的变量。例如,定义一个外层函数f1,内部包含函数f2,f1返回f2,当f1被调用并返回f2后,即使f1执行完毕,f2仍能访问f1的作用域。闭包的应用场景包括封装私有变量和创建记忆功能等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# JS闭包

闭包概念

  • 能够读取其他函数内部变量的函数
  • 定义在一个函数内部的函数,内部函数持有外部函数内变量的引用

简单来说,闭包是指可以访问另一个函数作用域变量的函数,一般是定义在外层函数中的内层函数,但并不仅仅是一个函数,它是一个环境,这个环境中保存了一些相关的数据及指针引用。

变量作用域
两种:全局变量、局部变量。js中函数内部可以读取全局变量,函数外部不能读取函数内部的局部变量。

为什么需要
局部变量无法共享和长久的保存,而全局变量可能造成变量污染,所以我们希望有一种机制既可以长久的保存变量又不会造成全局污染

何时使用?
变量既想反复使用,又想避免全局污染

用法

  • 定义外层函数,封装被保护的局部变量
  • 定义内层函数,执行对外部函数变量的操作
  • 外层函数返回内层函数的对象,并且外层函数被调用,结果保存在一个全局的变量中

从外部读取函数内部的变量

function f1(){
    var n = 123;
    function f2(){    //f2是一个闭包
        alert(n)
    }    
    return f2;
}
  • js链式作用域:子对象会一级一级向上寻找所有父对象的变量,反之不行。
  • f2可以读取f1中的变量,只要把f2作为返回值,就可以在f1外读取f1内部变量

用途

  • 读取函数内部的变量
  • 让这些变量的值始终保持在内存中。不会再f1调用后被自动清除
  • 方便调用上下文的局部变量。利于代码封装
    • 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束后,被垃圾回收机制回收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定喵君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值