包级功能

问题描述 投票:0回答:1

以下输出“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()
    }

go recursion scope
1个回答
0
投票

在全局范围内,

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)
仍然指的是全局函数。

© www.soinside.com 2019 - 2024. All rights reserved.