什么是闭包? | 计算机基础
本文转载自《如何通俗地解释闭包的概念?》
现在有一个函数 f(x) = a + x
,这个函数是不完整的:a 是多少?
有两个方法回答这个问题,第一种叫“动态作用域”,a 的值决定于函数调用时上下文中 a 的值,比如:
1 | a = 1 |
动态作用域的问题是,函数每一次调用相同的参数未必返回相同的值,其返回值还取决于上下文的某些值。
第二种是“词法作用域”,a 的值取决于函数定义时上下文中的值,比如:
1 | g(a) = lambda x: a + x |
这里函数 g 返回一个和上面函数 f 形式一样函数,a 在此处为2,那么:
1 | a = 1 |
因为 f 要“记住”自己定义时 a 的值为 2,所以实现时 f(x) = a + x
和 a = 2
被打包在一块,被称为“闭包”,意思是它是完整独立的,仅仅依靠调用时参数求值,不再依赖调用时的上下文。
什么是闭包? | 计算机基础