代码之家  ›  专栏  ›  技术社区  ›  Kenenbek Arzymatov

闭包是避免全局变量的方法吗?

  •  0
  • Kenenbek Arzymatov  · 技术社区  · 6 年前

    我知道使用全局变量不是好的做法,程序员应该尽可能避免使用它。

    func foo(a *A) func() *A {
        return func() *A {
            return a
        }
    }
    

    如果我打电话 foo_closure 在另一个函数中 bar 这意味着 酒吧 将不依赖于其输入参数和 酒吧 不能是纯函数。

    现在我看不出 a *A 闭包变量或全局变量。在这两种情况下,它们都会使输出变得不可预测。 闭包作为全局变量能被认为是一件坏事吗?

    附笔 其他函数也可以调用 fooèu闭包 改变它的领域。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Will Ness Derri Leahy    6 年前

    如果函数之外有“其他”变量,则输出是不可预测的 yourfunc 在调用之间更改全局变量的值 yourfunc公司 .

    但是如果变量 var 是封闭的,只有 yourfunc公司 ,其他任何东西都无法访问它,因此无法更改它 yourfunc公司 的输出完全可以通过 yourfunc公司 通过 yourfunc公司 的操作(例如,改变封闭变量 变量 ,只能从内部进行 yourfunc公司 ).

    这就增加了安全性和纯度,这是在第一个地方有关闭的关键。

    函数的值取决于它的环境,包括它的参数和封闭的变量。

    闭包的另一个用途是当封闭的环境 共享 之间 几个 函数,以便只有这些函数才能访问和更改封闭变量的值。

    不必要地将变量设为全局变量,会破坏全局名称空间,并使它们容易被错误访问。

    推荐文章