1. 推断下面代码输出结果:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    var f = func(i int) {
    fmt.Println("x")
    }

    func main(){
    f := func(i int) {
    println(i)

    if i > 0 {
    f(i-1)
    }
    }

    f(10)
    }
    可能有同学会测试为:
    1
    2
    3
    4
    3
    2
    1
    0
    但实际是:
    1
    2
    3
    x
    这是因为main函数在构造的时候全局f函数已经构造完成,所以使用的是全局f函数。而且如果改成为我们想像的逻辑,反而会报错:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    func main(){
    fi := func(i int) {
    println(i)

    if i > 0 {
    fi(i-1)
    }
    }

    f(3)
    }

    // 错误:
    # command-line-arguments
    ./main.go:314:4: undefined: fi