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

来源:8-1 Go语言-defer语句

Loedan

2020-01-19 23:51

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        
        }())    
    }
}


写回答 关注

2回答

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

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

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

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

Go语言第一课

Go语言入门教程,编程之必备知识扩散,打好Go语言编程基础

107795 学习 · 148 问题

查看课程

相似问题