【闭包】什么是闭包

1.定义:
  • 当内部函数,在定义他的作用域外被引用时就创建了该内部函数的闭包,如果内部函数引用了外部函数的变量,当外部函数调用完毕后,这些变量在内存中不会被释放,因为闭包需要他们。
  • 闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放。
2.闭包是什么?

闭包是嵌套的内部函数,包含被引用变量(函数)的对象

3.产生闭包的条件
  • 嵌套函数
  • 内部函数引用外部函数的数据。
function A(){   
    var a = 123;   
    function B(){       
        console.log(a) //123   
    }   
    return B()
}
A()();

闭包:函数A内部有函数B,函数B可以访问函数A的变量,那么函数B就是闭包。本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁

4.闭包的作用
  • ①读取函数内部的变量
  • ②让这些变量始终保存在内存中
  • ③可以避免使用全局变量,防止全局变量污染;
5.注意点:
  • ①变量会保存在内存中,内存消耗很大,所以不能滥用闭包,否则会影响性能,在IE中会造成内存泄露
  • ②闭包会在父函数外部修改内部变量的值,所以使用起来需要非常注意。
6.使用场景
  • 模拟私有方法
  • setTimeout的循环
  • 匿名自执行函数
  • 结果要缓存场景
  • 实现类和继承
### 什么是闭包 闭包是一种重要的编程概念,广泛应用于多种编程语言中。在 Python 中,闭包是指一个嵌套函数能够记住并访问其外部作用域中的变量,即使该外部作用域已经结束[^1]。这种机制的核心在于捕获周围环境的状态,并将其保存下来以便后续使用。 #### 工作原理 闭包是在函数定义时创建的,而非调用时。这意味着当一个函数引用了它的外部变量时,这些变量会在闭包创建的过程中被捕获[^2]。因此,无论外部作用域是否存在,闭包都可以继续访问这些被捕获的变量。 --- ### 使用方法 以下是几种常见的闭包应用场景及其代码示例: #### 场景一:简单的闭包实现 通过返回内部函数来展示闭包的工作方式。 ```python def outer_function(x): def inner_function(y): return x + y return inner_function add_five = outer_function(5) result = add_five(3) # 结果为8 print(result) ``` 在这个例子中,`inner_function` 是 `outer_function` 的局部函数,但它仍然可以访问来自外层函数的作用域变量 `x`,这正是闭包的特点之一[^1]。 #### 场景二:作为回调函数的应用 闭包常用于事件驱动型程序设计中,比如 GUI 编程或异步操作。 ```javascript function createCounter(initialValue) { let count = initialValue; return function increment() { count += 1; console.log(count); } } const counter = createCounter(0); counter(); // 输出1 counter(); // 输出2 ``` 此案例展示了 JavaScript 中如何利用闭包保持状态不变的同时更新计数器[^2]。 #### 场景三:装饰器的基础形式 Python 中的装饰器本质上也是基于闭包构建而成。它们用来增强其他函数的行为而无需改变原函数本身逻辑。 ```python def my_decorator(func): def wrapper(*args, **kwargs): print("Something is happening before the function is called.") result = func(*args, **kwargs) print("Something is happening after the function is called.") return result return wrapper @my_decorator def say_hello(name): print(f"Hello {name}") say_hello('Alice') ``` 这里 `wrapper` 函数构成了围绕目标函数的一个闭包结构,从而实现了额外功能注入而不破坏原有接口[^3]。 --- ### 总结 无论是哪种具体表现形式,闭包都提供了强大的工具让开发者能够在不同层次间共享数据或者延迟执行某些动作直到适当时候再触发。理解好闭包背后的思想对于掌握任何现代脚本语言都是至关重要的一步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Joseph365

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

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

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

打赏作者

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

抵扣说明:

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

余额充值