美文网首页
defer下的函数参数包含子函数运行过程

defer下的函数参数包含子函数运行过程

作者: 哆啦在这A梦在哪 | 来源:发表于2021-05-27 10:06 被阅读0次
    package main
    import "fmt"
    
    func test(index int, value int) int {
        fmt.Println(index)
        return index
    }
    
    func main() {
        defer test(1, test(3, 0))
        defer test(2, test(4, 0))
    }
    

    这里,有4个函数,他们的index序号分别为1,2,3,4。

    那么这4个函数的先后执行顺序是什么呢?这里面有两个defer, 所以defer一共会压栈两次,先进栈1,后进栈2。 那么在压栈function1的时候,需要连同函数地址、函数形参一同进栈,那么为了得到test1的第二个参数的结果,所以就需要先执行test3将第二个参数算出,那么test3就被第一个执行。同理压栈test2,就需要执行test4算出test2第二个参数的值。然后函数结束,先出栈fuction2、再出栈test1.

    所以顺序如下:

    defer压栈test1,压栈函数地址、形参1、形参2(调用test3) --> 打印3
    defer压栈test2,压栈函数地址、形参1、形参2(调用test4) --> 打印4
    defer出栈test2, 调用test2 --> 打印2
    defer出栈test1, 调用test1--> 打印1

    3
    4
    2
    1
    

    相关文章

      网友评论

          本文标题:defer下的函数参数包含子函数运行过程

          本文链接:https://www.haomeiwen.com/subject/zhyrsltx.html