【发布时间】:2018-04-10 14:46:17
【问题描述】:
package main
var a string
func main() {
a = "G"
print(a)
f1()
}
func f1() {
a := "O"
print(a)
f2()
}
func f2() {
print(a)
}
我认为在f1 中调用f2 时f2 将在f1 的块中,因此输出将为GOO,但输出为GOG。
在函数内声明的类型标识符的范围从 TypeSpec 中的标识符开始,到最里面的包含块的末尾结束。 -- 来自https://golang.org/ref/spec#Declarations_and_scope
函数中包含哪些块?
为什么另一个函数不包含块?
【问题讨论】:
-
这里的包含块是定义函数的块,而不是调用函数的块。大多数块都以
{ }为框架。