2017-01-09 84 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