对闭包的理解
“闭包”这个概念一般用在两种毫不相干的场景中:
第一种:在抽象代数里,一集元素称为在某个运算(操作)之下封闭,如果将该运算应用于这一集合中的元素,产生出的仍然是该集合里的元素。
如Scheme语言中的cons过程具有该性质。
第二种:百度解释:闭包是可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,
而是在定义代码块的环境中定义(局部变量)...在编程领域我们可以通俗的说:子函数可以使用父函数中的局部变量,这种行为就叫做闭包!
比如Go语言中的闭包。
网上一般认为第二种说法更确切,这种观点的出发点是:第一种观点认为“闭包是符合一定条件的函数”,本人认为该观点是对第一种概念的误解,
因为第一种概念强调的是集合与运算的关系,而不是运算本身。其实两种说法没有比较的意义,根本说的就是两回事。
另外,部分观点将闭包等同于匿名函数和高阶函数,本人认为不妥,因为匿名函数和高阶函数只是闭包的一种应用。