Estoy tratando de entender un código que encontré en internet. No entiendo en el ciclo while, por qué no es un ciclo infinito. Si cambia el calculator.appendChilden por ejemplo, console.logse ejecuta para siempre.
 window.location.hash = 1;
 var calculator = document.createElement("div");
 calculator.id = "height-calculator";
 while (document.body.firstChild) {
    calculator.appendChild(document.body.firstChild);
 }
 document.body.appendChild(calculator);
 document.title = calculator.clientHeight;Básicamente, siempre hay un primer hijo en un sitio no vacío, por lo que la condición siempre es cierta. ¿Alguien puede explicar por qué de esta manera no funciona para siempre?
                    
                        javascript
                                html
                                
                    
                    
                        B. Ma
fuente
                
                fuente

calculatorelemento está fuera del dom, y el ciclo while simplemente se mueve sobre todos los elementos secundarios debodytocalculator, por lo que en algún momentobodyestará vacío y el ciclo finalizará. La clave aquí, supongo, es quecalculatorno es en sí un hijobodydurante el ciclo.Respuestas:
Un elemento sólo puede ser hijo de uno otro elemento.
Tan pronto como se conecta
document.body.firstChilda su calculadora, se separa automáticamente del cuerpo, por lo que el cuerpo finalmente se quedará sin niños.fuente
But wouldnt there be another firstChild? not the same as earlier but what was next in line will become the firstChild now..wouldnt it?Lo haría, y luego el ciclo se ejecuta nuevamente y toma a este niño también, hasta que no tenga más hijos.cloneNodeél, se repetirá para siempre (o más bien, hasta que se quede sin memoria).Entonces el proceso ocurre en 3 simples pasos:
var calculator = document.createElement("div");esta línea crea undivEXTERIOR delbodyen el DOMLuego, el bucle mueve a todos los hijos de
bodya localculatorque finalmente termina a menos quebodytenga hijos infinitos, lo que no es posible.document.body.appendChild(calculator);mueve elcalculatorbajobodyBásicamente, hay dos entidades principales
bodyycalculator, el script mueve a todos los hijos debodyaycalculatorluego se muevecalculatorabody.En otras palabras, el script convierte a todos los hijos de
bodyagrandchildrendebodyy el único hijo de sebodyconvierte encalculatorSé que escribí demasiado, pero yo mismo lo entendí después de un tiempo, leyendo otros comentarios y respuestas, así que solo quería dejarlo aquí para mí mismo para el futuro y para cualquier otra persona que necesite más explicaciones para obtenerlo LOL
fuente