package main

import "fmt"
// defer 把函数放到栈中,最先定义的最后执行
func a() {
i := 0
defer fmt.Println(i) // 放到函数栈中的时候也把值传入进去了
i++
defer func(i int) {
fmt.Println(i) // 放到函数栈中的时候也把值传入进去了
}(i)
defer func() { // 使用的是全局变量
i++
fmt.Println(i)
}()

return
}
func main() {
a() // 2 , 1 ,0