外国企业网站模板免费下载,怎样卸载下载的wordpress,建网站专用网站,wordpress添加分类图片尺寸闭包的概念
想象一下#xff0c;你有一个包裹着变量的函数#xff0c;就像是一个封闭的包裹。这个包裹里有一个变量#xff0c;而这个函数#xff08;或包裹#xff09;本身就是一个完整的单元。当你把这个函数传递给其他地方#xff0c;就像是把这个包裹传递出去。
这…
闭包的概念
想象一下你有一个包裹着变量的函数就像是一个封闭的包裹。这个包裹里有一个变量而这个函数或包裹本身就是一个完整的单元。当你把这个函数传递给其他地方就像是把这个包裹传递出去。
这个包裹不仅包含函数的代码还包裹着它的词法环境也就是函数定义时所在的上下文其中包含的变量。这就意味着在函数之外你仍然可以访问和使用函数内的变量就好像把这个包裹带到其他地方一样。这种行为就像是一个封闭的包裹因此被称为 闭包。
所以闭包就好比是一个能够包含函数代码和其相关环境的封闭单元而且可以在其定义的范围之外继续存在和生效。 应用场景
闭包是有权访问另一个函数作用域变量的函数常见方式是函数内部创建另一个函数
优点减少代码量使这些局部变量始终保存着内存中避免使用全局变量
缺点这些局部变量不会立即销毁浪费内存
比如A函数入参有5个在A函数的处理逻辑中还需要调用B函数和C函数而且B函数和C函数也用到了比较多的入参那么如果将B和C定义到了函数A之内这些入参就可以省去直接调用即可
代码的可读性也比较强。
不同语言Demo
匿名函数的使用在 Go 语言中非常灵活可以帮助简化代码结构和提高代码的可读性。
这三个示例分别演示了在Java、Python和Go中如何使用闭包来捕获外部变量并在闭包内部使用它们。闭包允许我们在不传递变量的情况下将函数及其上下文传递给其他部分这在某些情况下非常有用。
Java:
import java.util.function.*;public class ClosureExample {public static void main(String[] args) {int x 10;// 使用Lambda表达式创建一个闭包IntSupplier closure () - x * 2;// 调用闭包int result closure.getAsInt();System.out.println(结果 result);}
}在这个Java示例中我们使用IntSupplier接口创建了一个闭包 closure它捕获了外部变量 x 的值并返回 x * 2。这个闭包可以在定义它的上下文之外使用。
Python:
def outer_function(x):def inner_function():return x * 2return inner_functionclosure outer_function(10)
result closure()print(结果:, result)在这个Python示例中我们定义了一个外部函数 outer_function它接受一个参数 x并返回一个内部函数 inner_function。inner_function 捕获了外部变量 x 的值并返回 x * 2。然后我们通过调用 outer_function(10) 创建了一个闭包 closure并调用它来获得结果。
Go:
package mainimport fmtfunc main() {x : 10// 创建一个闭包函数closure : func() int {return x * 2}// 调用闭包result : closure()fmt.Println(结果:, result)
}在这个Go示例中我们使用匿名函数创建了一个闭包 closure它捕获了外部变量 x 的值并返回 x * 2。然后我们调用闭包并打印结果。
这三个示例分别演示了在Java、Python和Go中如何使用闭包来捕获外部变量并在闭包内部使用它们。闭包允许我们在不传递变量的情况下将函数及其上下文传递给其他部分这在某些情况下非常有用。