簡體   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