繁体   English   中英

array.push是否复制深?

[英]Does array.push copies deeply?

我正在尝试使一组工人工作,所以我编写了这段代码。

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);
}

我想知道它是否能够在不进行多次初始化的情况下复制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许多消息并具有单个消息侦听器。

请注意,在这两个示例中,都不应在onmessage回调中访问c ,因为在接收消息时c等于core 如果需要在回调中使用它,请使用let c而不是var c进行声明,以在创建回调时访问该值说明 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM