概要
関数の入れ子について、まとめてみます。
javascriptで関数の中にさらに関数を入れ子で定義する場合についてです。
この場合、変数へのアクセスの制約に注意する必要があります。
関数内で入れ子にした関数から、大元の関数の仮引数や変数にアクセスが可能です。
簡単な例を下記に書きます。
function test1(a) { //処理 console.log(a); //入れ子の関数を定義 function test2() { //処理 a++; //ここで引数aに対してアクセスができる console.log(a); } test2(); console.log(a); } test1("10");
出力結果
10 11 11
わかりやすいように処理を一切書いていませんが、上記のように大元の関数の引数へアクセスすることができます。
出力結果は、10、11、11となり、まず最初の関数test1で呼び出された直後の引数の値が「10」として出力され、
次に関数内で定義されたtest2が呼び出された際の「11」が出力されます。
最後に、test1の関数の終わりに出力した変数aの値「11」が出力されます。
3回目の出力で値が「11」になるのは、関数test1の引数で定義されているaが、関数test2の中からアクセスされてインクリメントされている為です。
実装の方法はさらに複雑になる場合が多く、変数の有効範囲について注意して実装していきます。