2017-01-09 82 views
0

我用forEach它的行爲有點不同,那麼我記得。通常我只是爲元素分配一個新的值,但這次不起作用。難道它在嵌套數組中不能正常運行?Array.prototype.for每個重新分配的元素

現在的片段:

//works 
this.array[0].forEach((ele,ind,arr)=>{   
      arr[ind] = 'E'; //works fine 
     }); 

//fails 
this.array[0].forEach((ele,ind,arr)=>{ 
      console.log(ele); //element is empty 
      ele = 'E'; 
      console.log(ele); //element is 'E' 
     }); 

我會假設元素本身是由價值複製的,而不是參考。

我看了Mozilla Docs但我找不到任何關於它的東西。

回答

1

JavaScript是嚴格的pass/call/assign by value。這意味着,如果你這樣做

var foo = 42; 
var bar = foo; 
bar = 21; 

那麼這隻會改變bar,不foo值。所以雖然ele = 'E';更改了ele的值,但它不會影響陣列。情況一直如此,forEach對於任何陣列都完全相同。

+0

這是一個非常大膽的聲明。這不完全是按照價值。當值作爲引用傳遞時(如數組),那麼它的行爲就像引用傳遞一樣 - 如果我們改變item,它就會傳播到數組中。如果我們改變數組的引用,它確實表現爲按值傳遞。一團糟。 – lustoykov

+1

不要將**通過**引用與通過** ** **引用混淆。但是你是對的,通過傳遞參考,我們可以實現類似的效果,如果JavaScript通過引用傳遞的話。不過,JavaScript嚴格按照價值傳遞。 –

+0

然而,在我的理解中,按值傳遞會創建對象/數組的副本,根本不會傳遞引用。在wiki中,你鏈接了 >也就是說,當函數返回 – lustoykov