【js】appendChild()具有移动性

最近又在看vue响应式的源码,发现了之前没注意到的一个点:

当实现指令解析器Compile的时候,是通过创建文档碎片,将原本的dom树中的节点一个个添加到文档碎片中:

// el 是传入的DOM树
var f = document.creatDocumentFragment()
var firstChild;
while(firstChild = el.firstChild){
    f.appendChild(firstChild)
}

这里要注意的是,当firstChild被赋值时,作为复杂数据类型,存储了指向el.firstChild的指针,使用appendChild会将参数移动到调用者身上,而不是复制一份,添加到调用者身上。

因此,并不会形成死循环,而是循环直到el为空。

原文地址:https://www.cnblogs.com/ashen1999/p/13417668.html