什么是闭包? | 计算机基础

本文转载自《如何通俗地解释闭包的概念?》

现在有一个函数 f(x) = a + x,这个函数是不完整的:a 是多少?

有两个方法回答这个问题,第一种叫“动态作用域”,a 的值决定于函数调用时上下文中 a 的值,比如:

1
2
a = 1
v = f(1) # 这里 v 为 2

动态作用域的问题是,函数每一次调用相同的参数未必返回相同的值,其返回值还取决于上下文的某些值。

第二种是“词法作用域”,a 的值取决于函数定义时上下文中的值,比如:

1
2
g(a) = lambda x: a + x
f = g(2)

这里函数 g 返回一个和上面函数 f 形式一样函数,a 在此处为2,那么:

1
2
a = 1
v = f(1) # 这里 v 为 3

因为 f 要“记住”自己定义时 a 的值为 2,所以实现时 f(x) = a + xa = 2 被打包在一块,被称为“闭包”,意思是它是完整独立的,仅仅依靠调用时参数求值,不再依赖调用时的上下文。

什么是闭包? | 计算机基础

http://www.zh0ngtian.tech/posts/5fee69b.html

作者

zhongtian

发布于

2022-08-20

更新于

2023-12-16

许可协议

评论