詞法作用域
var x = 42
func main() {
fmt.Println(x)
foo()
}
func foo() {
fmt.Println(x)
}
- 函數(shù)作用域
類似閉包,因?yàn)閤是全局變量
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
}
}
他們之間有相似之處慨仿,因?yàn)樵谏厦娴拇a中,x本來就是全局變量纳胧,所以x一直存在镰吆,一直可以調(diào)用,但是下面的代碼中
x要想一直存在變量中跑慕,所以x必須被別人引用万皿,且將引用x的函數(shù)返回到全局變量中,這樣就形成了閉包
包的作用域
同一包中兩個(gè)文件核行,之間調(diào)用牢硅,確定要在一起編譯時(shí)可以調(diào)用的代碼塊的作用域
{}代表變量的作用域
func main() {
x := 1
{
y := 2
}
fmt.Println(x)
fmt.Println(y)
}