嵌套函數只是另一個函數的主體內限定的功能。爲什麼?關於我能想到的唯一理由就是助手或實用功能。
這是一個人爲的例子,但忍受着我。假設您有一個函數必須針對結果執行兩個查詢,並使用其中一個查詢的值填充對象。你可以做如下的事情。
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;
}
}
它保持一點清潔。它是否必須是嵌套函數?不,但你可能想這樣做,如果過程函數是唯一需要這樣做的副本。