}
输出:
在defer时,确定了arr的地址(数组是地址形式,直接传递地址),所以在打印时,可以打印到更改的数据
示例四 defer+return执行步骤
package main
import...}
输出:
原因是:
函数调用的执行步骤为: 调用函数->设定返回值result->赋值result=1->准备return,return的值为resulr->执行defer赋值为2->return... i
}
输出:
原因是:
return的调用并非原子性的,分为2个步骤:1 确定返回值,2正式返回
在确定返回值之后,会去执行defer方法,如果defer将返回值变更,则返回时数据也会变更....在此示例中,return将i赋值给了result,这个时候result=1,同时result又更改成了2,所以为2
总结
规则一:延迟函数的参数在声明时就确定下来了
defer函数在声明时就已经确定好了参数...defer函数在声明后类似于入栈操作,调用时候类似于出栈操作,所以是后进先出执行
规则三:函数返回过程非原子操作
return时非原子操作的,return操作的是将返回值存入栈中等待操作,
然后执行返回跳转