>[!核心定义] Lambda表达式能够捕获外部作用域的变量(即[闭包](闭包.md)) - 如果从实现上来看的话,匿名函数如果没有捕捉自由变量,那么它其实可以被实现为一个函数指针,或者直接内联到调用点, - 如果它捕捉了自由变量那么它将是一个闭包;而闭包则意味着同时包括函数指针和环境两个关键元素。 - 在编译优化当中,没有捕捉自由变量的闭包可以被优化成普通函数,这样就无需分配闭包结构体,这种编译技巧被称为[函数跃升](https://zh.wikipedia.org/w/index.php?title=%E5%87%BD%E6%95%B0%E8%B7%83%E5%8D%87&action=edit&redlink=1)。 闭包(Closure)是编程语言中的一个重要概念,特别是在[函数式编程](函数式编程.md)中。 闭包是一个函数,它可以访问其词法作用域之外的变量。换句话说,闭包 " 封闭 " 了其周围的状态。 闭包支持意味着编程语言允许创建和使用这样的函数。在 Groovy 中,闭包是一等公民,这意味着它们可以: - 被赋值给变量 - 作为参数传递给函数 - 从函数返回 - 在运行时创建 闭包的强大之处在于它可以捕获和保持其创建时的上下文,即使在不同的作用域中执行也是如此。 让我给您一个 Groovy 中闭包的简单例子: Groovy Closure ExampleClick to open code 在这个例子中: createMultiplier 函数返回一个闭包。 这个闭包捕获了 factor 参数。 我们创建了两个闭包:doubler 和 tripler。 每个闭包都记住了它被创建时的 factor 值。 闭包支持使得代码更加灵活和强大。它们在很多场景下非常有用,比如: - 延迟执行 - 回调函数 - 事件处理 - 函数式编程模式 在 Groovy 中,闭包还被广泛用于集合操作、DSL 构建等场景,大大提高了代码的表达能力和简洁性。