Вложенная функция - это просто функция, определенная в теле другой функции. Зачем? Единственная причина, по которой я мог придумать, - это вспомогательная или служебная функция.
Это надуманный пример, но потерпите меня. Допустим, у вас была функция, которая должна была воздействовать на результаты двух запросов и заполнять объект значениями из одного из запросов. Вы могли бы сделать что-то вроде следующего.
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;
}
}
Он немного чище. Это должна быть вложенная функция? Нет, но вы можете сделать это таким образом, если функция процесса является единственной, которая должна делать эту копию.