go作用域

2017-08-15  本文已影响30人  seven_son

词法作用域

var x = 42

func main() {
    fmt.Println(x)
    foo()
}

func foo() {
    fmt.Println(x)
}
var x = 0 
func increment() int {
    x++
    return x
}

func main() {
    fmt.Println(increment())
    fmt.Println(increment())
}

闭包:

func wrapper() func() int {
    x := 0
    return func() int {
        x++
        return x
    }
}

他们之间有相似之处,因为在上面的代码中,x本来就是全局变量,所以x一直存在,一直可以调用,但是下面的代码中
x要想一直存在变量中,所以x必须被别人引用,且将引用x的函数返回到全局变量中,这样就形成了闭包

    func main() {
    x := 1
    {
        y := 2
    }
    fmt.Println(x)
    fmt.Println(y)
}
上一篇 下一篇

猜你喜欢

热点阅读