词法作用域
var x = 42
func main() {
fmt.Println(x)
foo()
}
func foo() {
fmt.Println(x)
}
- 函数作用域
类似闭包,因为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)
}