,而 foo 函数则是包围函数用于演示 defer 关键字的逻辑,TestFoo 是测试函数,输出测试结果....无论是否存在延迟函数,均顺序执行函数逻辑
准备阶段的入栈操作会正常运行但不会调用函数
执行阶段的出栈操作在合适时机时会调用函数
同样地,仍然以消防队员作为 Go 的调度器,平民百姓作为无 defer 保护的对比参考...如果此时匿名函数调用的不是 n 而是 x,而变量 x 并不存在于入栈环境中,此时就会继续扩大范围搜到 deferWithValueParams 函数是否存在变量 x 的声明,本示例中找到的 x=11....return 返回前有机会对返回值进行更改,这里演示了及时雨插入的逻辑,输出结果不变还是 11.
?...简而言之,延迟函数在声明时会收集相关参数赋值拷贝一份入栈,时机合适时再从入栈环境中寻找相关环境参数,如果找不到就扩大范围寻找外层函数是否包含所需变量,执行过程也就是延迟函数的出栈.