Я пытаюсь рекурсивно распечатать содержимое jQuery. Я планирую использовать это для анализа существующего экземпляра jQuery (загруженного на странице) с небольшой базой данных известных подписи jQuery, чтобы определить, какие изменения были сделаны (то есть, какие плагины были загружены, изменены функции и т. Д. .).Как предотвратить бесконечную рекурсию
Чтобы сделать это, у меня есть небольшая функция:
function recurse(obj, iter){
var padding = (new Array(iter + 1)).join(" ") + ">";
for (var i in obj){
document.writeln(padding + i + "<br/>");
if (iter < 5)
recurse(obj[i], iter + 1);
}
}
Когда я выполняю это:
recurse(jQuery, 1);
я получаю что-то вроде этого:
>prototype
>init
>prototype
>init
>prototype
>selector
>jquery
>0
.... On and on and on .....
Моя проблема заключается, в самом начале вы можете видеть, что prototype
, а затем init
repeat ov и снова и снова. Единственная причина, по которой он остановился на 5 глубинах, - это проверка if (iter < 5)
. Если предел не был там, он бы возобновил [sic?] Навсегда. Предел итерации помогает, но что, если есть критическая функция? По сути, я понятия не имею, что я должен сделать для этого предела итерации, или если он вообще должен быть.
Вместо этого я думаю, что должен быть какой-то алгоритм, который может предотвратить бесконечную рекурсию. Существует ли такой алгоритм? Или я должен изменить, как я иду обходить jQuery? Спасибо,
Обратите внимание, что объекты проходят по ссылке и работают с переменными с более высокой областью действия, чем вызываемые функции. – Incognito
@ user257493 да? Я не уверен, что понимаю, что с этим связано. Однако вы правы, что числовые или логические свойства могут испортить это; Я отредактирую функцию. – Pointy
Благодарим вас за предложения. Я попробую это позже и скажу вам, если это сработает. –