gpt4 book ai didi

javascript - forEach() 是否通过引用绑定(bind)?

转载 作者:可可西里 更新时间:2023-11-01 02:53:36 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com