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]);
}
如上面的代码所示,我注意到更改传递给 forEach()
回调的项目的值不会导致迭代对象发生变化。
使用 for...in
当然可以。
这是为什么?我应该如何更改数组中的值?
我发现这个话题在 MDN 上很困惑。
最佳答案
Using for...in certainly does.
不,它没有。您的 forEach
循环等效于此 for...in
循环(顺序除外):
for (var index in arr) {
var item = arr[index];
console.log(item);
item = 'Lorem';
console.dir(arr[0]);
}
你看到数组也没有被修改吗?那是因为 JavaScript 总是 pass-by-value , 并且有一个非常简单的规则要记住:
Assigning a value to a variable never changes the value of another variable or data structure.
也就是说,给item
赋新值,不能改变arr
的元素。如果你想修改数组,你必须通过为索引赋值直接改变它,即
arr[index] = 'foo';
关于javascript - forEach() 是否通过引用绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23964111/