我有HTML代碼,看起來像這樣:這種類型的遞歸在JavaScript中不好嗎?如果是這樣,我應該如何重寫它?
<body>
<label for="change0">What is your favorite number?</label>
<input type="text" id="change0" />
<div id="addStuff"></div>
<script src="scripts/main.js"></script>
</body>
我有JS,看起來像這樣:
/** @type {number} */
var counter = 1;
function doStuff(id) {
var thing = document.getElementById(id);
thing.addEventListener('change', doMoreStuff);
}
function doMoreStuff() {
counter++;
var addStuff = document.getElementById("addStuff");
var stuff = document.createElement("input");
stuff.id = "change" + counter;
stuff.type = "text";
addStuff.appendChild(stuff);
doStuff(stuff.id);
}
window.onload = function() {
/** @constant */
var SEED_ID = "change0"
doStuff(SEED_ID);
};
的doMoreStuff()函數遞歸調用doStuff()函數。 JavaScript是否正確地管理內存,還是我不正確地做這件事?
如果doStuff也叫doMoreStuff,你的代碼會崩潰。 – 2015-03-19 12:21:25
而不是將ID傳入您的'doStuff'函數,您可以傳入元素。這意味着你根本不必爲動態添加的'input'元素賦予一個'id'屬性。在你的'window.onload'中執行'doStuff(document.getElementByID(SEED_ID))',然後在'doMoreStuff()'函數中執行'doStuff(stuff)'。 – 2015-03-19 12:21:36
我不認爲你明白遞歸意味着什麼。如果doStuff稱爲doStuff,那麼真正的遞歸調用就是如此,那麼是的,你可能遇到問題。你的代碼沒有什麼問題,事實上,把你的代碼分成多個函數調用是一種很好的編程習慣,因爲它更容易跟蹤和維護。 – Russ 2015-03-19 12:23:00