练习题地址
练习 4.1 local_scope.go:
package main
var a = "G"
func main() {
n()
m()
n()
}
func n() { print(a) }
func m() {
a := "O"
print(a)
}
解析:
变量a为全局变量字符串,执行函数n(),打印出“G”。然后执行函数m,此时声明了一个局部变量a,并赋值为“O",所以下一个打印的字母为”O“。当出了函数m()作用域时,局部变量a析构。当再次执行函数n()时,此时打印的是全局变量a,所以为”G“。
所以该题结果为:
"GOG"
练习 4.2 global_scope.go:
package main
var a = "G"
func main() {
n()
m()
n()
}
func n() {
print(a)
}
func m() {
a = "O"
print(a)
}
解析:
第一个函数n()执行时,打印"G",然后执行函数m(),此时时全局a被赋值为"O",所以第二个n()执行时,全局变量a已经是"O"。所以该题的结果为:
"GOO"
练习 4.3 function_calls_function.go
package main
var a string
func main() {
a = "G"
print(a)
f1()
}
func f1() {
a := "O"
print(a)
f2()
}
func f2() {
print(a)
}
解析:
在main函数中先打印"G",然后进入f1(),出现局部变量a被赋值为"O",打印"O",然后执行f2(),由于此时已经进入函数f2的作用域,所以a为全局变量a,打印"G"。所以该题结果为:
"GOG"