Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript forEach()是否通过引用绑定?_Javascript_Foreach_Pass By Reference - Fatal编程技术网

Javascript forEach()是否通过引用绑定?

Javascript forEach()是否通过引用绑定?,javascript,foreach,pass-by-reference,Javascript,Foreach,Pass By Reference,正如上面的代码所示,我注意到更改传递给forEach()回调的项的值不会导致迭代对象发生更改 在中为…使用,当然可以 为什么&我应该如何更改数组中的值? 我发现这个主题在上的描述相当混乱,注意,forEach中的回调函数有三个参数。第二个是当前元素的索引,第三个是数组本身。如果要修改数组,请使用这两个参数。在本例中,项变量是按值传递的,因为它是原始值。如果它是一个json对象,并且您要更改它的一个属性,那么它将反映在原始列表中 在这种情况下,您可以使用forEach具有的其他参数。例如: var

正如上面的代码所示,我注意到更改传递给
forEach()
回调的项的值不会导致迭代对象发生更改

在中为…使用
,当然可以

为什么&我应该如何更改数组中的值?


我发现这个主题在

上的描述相当混乱,注意,
forEach
中的回调函数有三个参数。第二个是当前元素的索引,第三个是数组本身。如果要修改数组,请使用这两个参数。

在本例中,
变量是按值传递的,因为它是原始值。如果它是一个json对象,并且您要更改它的一个属性,那么它将反映在原始列表中

在这种情况下,您可以使用
forEach
具有的其他参数。例如:

var arr = ['Foo'];

arr.forEach(function(item){
  console.log(item);
  item = 'Lorem';
  console.dir(arr[0]);

});

for (var item in arr){
  arr[item] = 'Ipsum';
  console.dir(arr[0]);
}
使用这些参数,可以直接影响
array[index]

在…中使用当然是

不,没有。您的
forEach
循环相当于此
for…in
循环(订单除外):

你看到数组也没有被修改吗?这是因为JavaScript始终是,并且有一个非常简单的规则需要记住:

将值指定给变量绝不会更改另一个变量或数据结构的值

这意味着,为
指定一个新值,无法更改
arr
的元素。如果你想修改数组,你必须通过给索引赋值来直接改变它,例如

for (var index in arr) {
  var item = arr[index];
  console.log(item);
  item = 'Lorem';
  console.dir(arr[0]);
}

访问属性的顺序完全取决于实现。只访问从0到长度的数值属性,并且严格按照数值顺序访问,这与值无关。到MDN的链接断开了,可能是你的意思。你能把你的代码放在这里而不是放在其他网站上吗?我发现这听起来很混乱,因为有对象经过reference@Sprottenwels:不,这是正确的。JavaScript只有传递值。JavaScript中唯一的值是原语和指向对象的指针。“对象”不是值,不能被“传递”。@Sprottenwels:它令人困惑,但“通过引用传递”具有不同且非常具体的含义。你可以在维基百科的文章中读到。还可以看看passbysharing一节,它更接近于JS的工作原理,但这不是一个很常见的术语。这正是我想要的。谢谢
for (var index in arr) {
  var item = arr[index];
  console.log(item);
  item = 'Lorem';
  console.dir(arr[0]);
}
arr[index] = 'foo';