异想天开

What's the true meaning of light, Could you tell me why

闭包

日期:2014-11-10 14:52:18
  
最后更新日期:2017-10-24 23:51:21
【技术】
闭包概念在上个世纪60年代就有了。javascript和lua里面就有用到闭包。闭包,我的理解是,函数内部的局部函数,引用了该函数的局部变量,该局部函数作为对象返回,那么构成闭包。这类局部变量,其实并不等同于c/c++的栈里面的局部变量。闭包其实算是概念。实际上理解可以认为有个垃圾回收(gc)机制,由于局部函数作为对象返回了,所以对垃圾回收机制而言,函数还被引用了,函数包括函数内部的变量,都不会随着调用后而释放,因此保存了函数调用状态。

来看一段python例子:
[code lang="cpp"]
#!/usr/bin/python


def add_magic(a):
hello = a
def add(c):
return hello + c
return add;


my_add1 = add_magic(4)

my_add2 = add_magic(3)

print map(my_add1, [1,2,3,4,5,6])
print map(my_add2, [1,2,3,4,5,6])
[/code]
闭包有什么好处呢?假设你在写一个框架的代码,对于业务代码,你不想暴露框架的某些参数,就比如上面的例子,你想写特殊的求和函数,只指定加4或加3,那么对于业务而言就不会感知,而不用加了这个参数。