javascript - array.push 是否深度复制?
问题描述
我正在尝试制作一组工人,所以我编写了这段代码。
for(var c=0;c<core;c++){
let worker = new Worker("Html/Worker.js");
worker.postMessage({core:core,W:width,H:height,id:c,px:px,py:py,pz:pz,yaw:yaw,pitch:pitch,D:D,fov:fov});
worker.onmessage=(e)=>{
let gap = this.sH/core*e.data[2];
this.frameBuffer.set(e.data[0],Math.floor(gap)*this.sW*4);
//alert(e.data);
this.depthBuffer.set(e.data[1],Math.floor(gap)*this.sW);
}
this.threads.push(worker);
}
我想知道它是否能够在没有多次初始化的情况下复制工作者(如下面的代码)
let worker = new Worker("Html/Worker.js");
for(var c=0;c<core;c++){
worker.postMessage({core:core,W:width,H:height,id:c,px:px,py:py,pz:pz,yaw:yaw,pitch:pitch,D:D,fov:fov});
worker.onmessage=(e)=>{
let gap = this.sH/core*e.data[2];
this.frameBuffer.set(e.data[0],Math.floor(gap)*this.sW*4);
this.depthBuffer.set(e.data[1],Math.floor(gap)*this.sW);
}
this.threads.push(worker);
}
array.push 会导致深度复制吗?
解决方案
不,Array.push
不会导致深度复制。
this.threads.push(worker)
不会修改worker
您传递给它的内容,只会将其按原样添加到数组this.threads
中。
这意味着在您的第二个示例中,将只有一个工作人员接收core
许多消息并具有一个消息侦听器。
请注意,在这两个示例中,您不应c
在onmessage
回调中访问,因为在接收消息c
时将等于core
. 如果您在回调中需要它,请声明它let c
而不是在创建回调(说明)时var c
访问该值。
推荐阅读
- angular - 我应该为我的 Angular 6 应用程序使用 Angular Material 还是 Bootstrap Material?
- oauth - OAuth:缩小范围?
- json - 有没有更好的方法将 Rust BSON 文档直接转换为 JSON?
- python - Python3.6:根据列表的给定元素将列表分成子列表
- python - Python 中的 CSV 到 XLSX
- android - 毕加索中的Firebase新版本getDownloadUrl不起作用
- java - Firebase:如何记录读/写错误的完整参考
- amazon-web-services - 如何调试cloudformation模板?策略中的语法错误。YAML 文件
- excel - 在 Excel 中使用文本和值对代码进行排序
- python - Beautiful Soup 找不到我想要的 HTML 部分