上級 › deferの引数はdefer文を実行した時点の値で評価される › パターン3
deferの引数はdefer文を実行した時点の値で評価される
defer文に渡した関数呼び出しの引数は、実際に関数が実行される(関数の終了時)タイミングではなく、defer文自体が実行された時点で評価され確定します。
1 package main 2 3 import "fmt" 4 5 func main() { 6 n := 5 7 _________________________________ ^ 8 n = 50 9 }
出力: 5
空欄を埋めて実行を通す
クロージャでラップすれば、変数nそのものを参照するようになり、関数終了時の最新値が使われます。
次の問題