我知道使用全局变量不是一种好习惯,程序员应尽可能避免使用它。
func foo(a *A) func() *A {
return func() *A {
return a
}
}
如果我在另一个函数foo_closure
中调用bar
,则意味着bar
的输出将不依赖于其输入参数,并且bar
不能是纯函数。
现在,我看不到通过闭包或全局变量访问a *A
变量之间的区别。在这两种情况下,它们都使输出不可预测。
可以将闭包视为全局变量是一件坏事吗?
P.S
其他功能也可以调用foo_closure
并对其字段进行突变。
答案 0 :(得分:1)
如果函数yourfunc
之外的“其他”更改了全局变量的值,则在调用yourfunc
期间,使用全局变量将无法预测输出。
但是,如果变量var
包含在闭包内并且只能由yourfunc
访问,则其他任何人都无法访问它,因此无法更改它,因此yourfunc
的输出将变为完全可以通过yourfunc
的参数和yourfunc
的动作来预测(例如,对封闭的变量var
进行突变,这只能在yourfunc
内部进行)。
这提高了安全性和纯度,这首先就是要关闭瓶盖。
一个函数的值取决于它的环境,包括它的参数和封闭的变量。
闭包的另一种用法是当封闭的环境在几个函数之间共享时,以便只有那些函数才能访问和更改封闭的变量的值。
不必要地具有全局变量,会使全局名称空间乱七八糟,并使它们易于错误访问。