Estou tentando entender um código que encontrei na internet. Eu não entendo no loop while, por que não é um loop infinito. Se alterar o calculator.appendChild
para, por exemplo, console.log
ele funciona para sempre.
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;
Basicamente, sempre há um primeiro filho em um site não vazio, portanto a condição é sempre verdadeira. Alguém pode explicar por que dessa maneira não funciona para sempre?
javascript
html
B. Ma
fonte
fonte
calculator
elemento está fora do dom e o loop while simplesmente se move sobre todos os filhos debody
tocalculator
, portanto, em algum momento,body
estará vazio e o loop terminará. A chave aqui, eu acho, é quecalculator
ela própria não é filhabody
durante o loop.Respostas:
Um elemento só pode ser filho de um outro elemento.
Assim que você se conecta
document.body.firstChild
à sua calculadora, ela se desconecta automaticamente do corpo, para que o corpo acabe ficando sem filhos.fonte
But wouldnt there be another firstChild? not the same as earlier but what was next in line will become the firstChild now..wouldnt it?
Seria, e então o loop é executado novamente e leva esse filho também, até que não tenha mais filhos.cloneNode
ele fará um loop para sempre (ou melhor, até que fique sem memória).Portanto, o processo acontece em 3 etapas simples:
var calculator = document.createElement("div");
esta linha cria umdiv
FORA dobody
no DOMEntão o loop move todos os filhos de
body
para ocalculator
que acaba eventualmente, a menos quebody
tenha filhos infinitos, o que não é possível.document.body.appendChild(calculator);
move ocalculator
underbody
Então, basicamente, existem duas entidades principais
body
ecalculator
, script move todos os filhos debody
paracalculator
e então movecalculator
parabody
.Em outras palavras roteiro converte todos os filhos de
body
aograndchildren
debody
e filha única debody
torna-se ocalculator
Sei que escrevi demais, mas eu mesmo entendi depois de um tempo, lendo outros comentários e respostas, então só queria deixar aqui para mim no futuro e para qualquer pessoa que precise de mais explicações para obtê-lo LOL
fonte