为何网页上显示的dom元素,放入闭包的数组中后,就会从页面上消失?
let factory=(function(){
let arr=[]//形成闭包
return {
create(){//获取对象
if(arr.length==0){
console.log('新建了元素!');
var div=document.createElement('div')
return div;
}else{//池中有元素,则拿出来一个用
return arr.shift()
}
},
recycle(i){//回收元素,放入池中(本简单例子没初始化元素)
arr.push(i)
}
}
})()
let arr1=['max','chloe']
let waitToRecycle=[]//收集要回收的元素
arr1.forEach((i,index)=>{
let div=factory.create();
div.innerHTML=i;
document.body.appendChild(div)
waitToRecycle.push(div)
})//调用对象池(对象池没有对象则会自动新建)
//回收对象到对象池
let arr3=[]
//这里如果不循环放入闭包变量中,则dom元素不会从页面上消失
waitToRecycle.forEach((i,index)=>{
factory.recycle(i)//其实就是将dom(引用类型)对象放入了闭包的变量中!!!
// 为啥把dom元素放入闭包的数组中,页面上就会消失呢?
// 因为闭包中的数据,外界都访问不到??
})
let arr2=['js','rachel']
//再次放入新元素到html中
arr2.forEach((i,index)=>{
let div=factory.create();
div.innerHTML=i;
document.body.appendChild(div)//此时页面上只显示js和rachel,因为max与chloe的dom元素被回收到闭包内存了!
waitToRecycle.push(div)
})
代码如上,从网上学习对象池的过程中,发现放入闭包中的dom元素不会在页面上显示
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
所以只是相当于在遍历 arr2 的时候修改了原 arr1 生成的两个元素。