Perché la versione A funziona ma la versione B no? Come posso far funzionare la versione B senza dichiarare una variabile globale al di fuori della funzione (che è una cattiva pratica)? Non sono chiaro sul motivo per cui non posso semplicemente dichiarare il conteggio all'interno della funzione stessa.la ricorsione non funziona senza dichiarare la variabile globale
A)
var count = 0;
var containsFiveOrMoreDivs = function(domElement) {
if (domElement && domElement.tagName === "DIV") {
count++;
}
//base case:
if (count >= 5) {
return true;
} else {
if (domElement.hasChildNodes()) {
var children = domElement.childNodes;
for (var i = 0; i < children.length; i++) {
if (containsFiveOrMoreDivs(children[i])) {
return true;
}
}
}
return false;
}
};
B)
var containsFiveOrMoreDivs = function(domElement) {
var count = 0;
if (domElement && domElement.tagName === "DIV") {
count++;
}
//base case:
if (count >= 5) {
return true;
} else {
if (domElement.hasChildNodes()) {
var children = domElement.childNodes;
for (var i = 0; i < children.length; i++) {
if (containsFiveOrMoreDivs(children[i])) {
return true;
}
}
}
return false;
}
};
Per quello che vale, il tuo problema non ha nulla a che fare con "passa per riferimento", che comunque non è possibile in JavaScript. – Pointy
C'è qualche ragione per cui non stai facendo 'element.querySelectorAll ('div'). Length> 5'? –