以下输出“2”。这是为什么?它不应该递归并打印“210”吗?
package main
var f = func(x int) {}
func Bar() {
f := func(x int) {
if x >= 0 {
println(x)
f(x - 1)
}
}
f(2)
}
func main() {
Bar()
}
在全局范围内,
f
在这里定义为采用int
并且不执行(和返回)任何操作。
var f = func(x int) {}
当您在这里重新定义
f
时:
f := func(x int) {
if x >= 0 {
println(x)
f(x - 1)
}
}
在计算 func 之前,无法定义 f
,因此“新”f
函数不在其自己的范围内。所以f(x - 1)
仍然指的是全局函数。