В моей функции я перебираю дерево в поисках определенного атрибута в узле. Функция называется рекурсивно и останавливается, когда атрибут найден или когда в дереве больше узлов.JavaScript: бесконечный цикл или нет?
Однако, когда я запускаю функцию, она переходит в то, что я предполагаю, это бесконечный цикл, Firefox замерзает, и я должен остановить процесс. Затем я добавил функцию setTimeout
в функцию, чтобы определить, что вызывает проблему, но теперь все работает правильно. Я отправляю функцию здесь, если кто-то имеет некоторое понимание того, что проблема есть (кстати, я использую AngularJS и убрав флажок):
$scope.uncheckNode = function(nodeId, subitem){
// Loop through each node in the sub nodes
for (i = 0; i<subitem.length; i++){
// If the node is found, uncheck it and break from the loop
if (subitem[i].Id == nodeId){
subitem[i].selected = false;
break;
}
// Otherwise get the sub nodes of the subnodes
// (an empty array if undefined)
// Check if it has any nodes and continue with the recursion
else{
var subsubitem = subitem[i].Subitem || [];
if (subsubitem.length > 0){
$scope.uncheckNode(nodeId, subsubitem);
}
}
}
}
Это будет бесконечно петля, если он никогда не найдет 'nodeId' в подэлементах. –