R で他の字句スコープの質問を見てきましたが、答えが見つかりません。次のコードを検討してください。
f <- function(x) {
g <- function(y) {
y + z
}
z <- 4
x + g(x)
}
f(3)
f(3)
は 10 の答えを返します。私の質問はなぜですか? g()
コードで定義されている時点ではz
、値は割り当てられていません。クロージャーはどの時点でg()
作成されますか? 関数本体の残りの部分を「先読み」しますか? が評価されるときに作成g(x)
されますか? もしそうなら、なぜですか?