我知道使用全局变量不是好的做法,程序员应该尽可能避免它。
func foo(a *A) func() *A {
return func() *A {
return a
}
}
如果我在另一个函数bar
中调用foo_闭包
,这意味着bar
的输出将不依赖于它的输入参数,bar
不能是纯函数。
现在我看不到通过闭包或全局变量访问a*a
变量之间的区别。在这两种情况下,它们都使输出不可预测。作为全局变量,闭包可以被认为是一件坏事吗?
其他函数也可以调用foo_closure
并改变其字段。
如果函数youfunc
之外的其他东西在调用youfunc
之间更改了全局变量的值,则全局变量的输出是不可预测的。
但是如果变量var
包含在闭包中,并且只有youfunc
可以访问,那么没有其他变量可以访问它,所以不能更改它,所以youfunc
的输出将完全由youfunc的参数预测
并通过youfunc
的操作(例如,改变封闭的变量var
,这只能从youfunc
内部完成)。
这增加了安全性和纯度,这是在第一个地方关闭的全部要点。
函数的值取决于它的环境,由它的参数和封闭的变量组成。
闭包的另一个用途是当封闭环境在多个函数之间共享时,只有这些函数才能访问和更改封闭变量的值。
不必要地将变量设置为全局变量,这会使全局名称空间变得杂乱无章,并使它们容易被错误访问。