问答详情
源自:8-1 Go语言-defer语句

第二个 func 里面的()为啥不用把 i 传进去呢

func main() {    
    for i := 0; i < 10; i++ {        
        defer func(n int) {            
            fmt.Printf("%d", n)        
        }(func() int {           
            n := fibonacci(i)           
            fmt.Printf("%d", n)           
            return n        
        }())    
    }
}


提问者:Loedan 2020-01-19 23:51

个回答

  • cwk44
    2020-02-02 03:24:30

    无所谓,参数部分是立即执行的。立即执行就会继承作用域内的参数,是否传i都行。

  • volsier
    2020-01-29 10:20:57

    第二个func是 defer 携带的表达式语句的参数,defer运行时对第二个func先求值