我正在處理一個太複雜(處理器)的函數,所以我在其中嵌入了一個嵌套的「實用程序函數」(print)中嵌入了部分功能。它簡化版本是這樣的:嵌套函數:我在這裏創建10個函數嗎?
var out = document.getElementById("output");
function processor (n) {
function print(msg) {
out.innerHTML += msg;
}
while (n > 0) {
print(n--);
print(", ");
}
print("<br/>");
}
for (var i = 0; i < 10; i++) {
processor(i);
}
你可以看到它在行動this JSfiddle。
問題是:我真的創建了10個實用函數print()
的實例嗎?如果是的話,在沒有將效用函數放在processor()
函數之外的情況下編寫該代碼的更有效方法是什麼?我希望print()
函數只能在processor()
和其他地方訪問。一種解決方案是命名空間。
我讀過這個問題,即使它有關,但它不是直接我的答案: Efficiency of creating an event handler in a nested loop: am I creating 1440 functions here?
不計算函數問題,真正歸結爲GC,如下所述,甚至可以優化爲只重新分配環境,正如另一個答案中提到的,您不應該使用innerHTML和許多小數據片。以數組形式組裝它們,或者至少使用字符串並一次分配。 –
是的,我知道innerHTML的性能問題。這只是一個看起來不同的代碼的簡單示例,但我不得不想出一些「print()」函數,而我不想使用console.log()。這只是一個即興即興;) – AlexStack