【发布时间】:2021-02-28 12:27:55
【问题描述】:
有时在打字稿中,当我在函数中将变量作为参数传递并在函数中对其进行修改时,原始变量也会修改,任何人都可以向我解释发生了什么
let mybrew :any[] = [
{
id:5,
materials:[-1,-1,-1,-1],
price:16
},
]
console.log(mybrew);
function bestBrew(abrow:any[]){
abrow.forEach(
e=>{
for (let i = 0; i < e.materials.length; i++) {
e.materials[0] += e.materials[i];
}
}
)
}
bestBrew(mybrew);
console.log(mybrew);
输出
[ { id: 5, materials: [ -1, -1, -1, -1 ], price: 16 } ]
[ { id: 5, materials: [ -5, -1, -1, -1 ], price: 16 } ]
【问题讨论】:
-
您面临的具体问题是什么?
-
我不希望全局 scoop (mybrew) 中的变量发生变化
-
因此,如果您不希望全局范围内的变量发生更改,则必须克隆您传递给函数的参数值。
-
既然是你要传入的数组,只需执行
newBrew = Array.from(abrow)并传入newBrew即可。阅读有关按值传递和按引用传递的信息。这会有所帮助。 `
标签: javascript angularjs angular typescript