# 闭包(Closure)

C 语言中的代码块

Objective-C中的block

JavaScript中的closure

[swift中的closure](https://hly-tech.gitbook.io/language/v/swift/bi-bao)

## **一、闭包表达式简介** <a href="#yi-lambda-biao-da-shi-jian-jie" id="yi-lambda-biao-da-shi-jian-jie"></a>

结构是怎么样的，不同的语言写法不一样

```
xxx
```

## 二、闭包捕获变量

1、 值捕获 +（可变）

2、 指针捕获

3、引用捕获

## 三、闭包用途

### 1. 作为函数参数：

* 可以将 lambda 表达式作为参数传递给其他函数，实现更加灵活的编程。
* 例如，在排序算法中，可以使用 lambda 表达式指定排序的规则。

### 2. 局部函数对象：

* 在局部作用域中创建函数对象，避免定义全局函数或成员函数。
* 可以提高代码的封装性和可读性。

### 3. 异步编程：

* 在异步操作中，闭包可以捕获上下文信息，以便在异步操作完成后进行正确的处理。

## 使得代码更加<mark style="color:orange;">简洁、灵活和易于维护</mark>。
