ネストされた関数は、単に別の関数の本体内で定義された関数です。なんで?私が頭のてっぺんから考えることができた唯一の理由は、ヘルパーまたはユーティリティ関数です。
これは不自然な例ですが、我慢してください。2つのクエリの結果に基づいて動作し、クエリの1つからの値をオブジェクトに入力する必要がある関数があるとします。次のようなことができます。
function process(qryResult q1, qryResult q2) {
object o;
if (q1.someprop == "useme") {
o.prop1 = q1.prop1;
o.prop2 = q1.prop2;
o.prop3 = q1.prop3;
} else if (q2.someprop == "useme") {
o.prop1 = q2.prop1;
o.prop2 = q2.prop2;
o.prop3 = q2.prop3;
}
return o;
}
20個のプロパティがある場合は、コードを複製してオブジェクトを何度も設定すると、巨大な関数になります。単純なネストされた関数を追加して、クエリからオブジェクトへのプロパティのコピーを実行できます。このような:
function process(qryResult q1, qryResult q2) {
object o;
if (q1.someprop == "useme") {
fillObject(o,q1);
} else if (q2.someprop == "useme") {
fillObject(o,q2);
}
return o;
function fillObject(object o, qryResult q) {
o.prop1 = q.prop1;
o.prop2 = q.prop2;
o.prop3 = q.prop3;
}
}
それは物事を少しきれいに保ちます。入れ子関数である必要がありますか?いいえ。ただし、このコピーを実行する必要があるのがプロセス関数だけである場合は、この方法で実行することをお勧めします。