Javascript 将变量作为参数传递而不影响它
有时在typescript中,当我将变量作为参数传递到函数中并在函数中修改它时,原始变量也会修改,任何人都可以向我解释发生了什么Javascript 将变量作为参数传递而不影响它,javascript,angularjs,angular,typescript,Javascript,Angularjs,Angular,Typescript,有时在typescript中,当我将变量作为参数传递到函数中并在函数中修改它时,原始变量也会修改,任何人都可以向我解释发生了什么 let mybrew :any[] = [ { id:5, materials:[-1,-1,-1,-1], price:16 }, ] console.log(mybrew); function bestBrew(abrow:any[]){ abrow.forEach(
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);
可以对对象进行深度克隆
lent newbrew = JSON.parse(JSON.stringify(mybrew));
bestBrew(newbrew);
您面临的问题到底是什么?我不希望全局独家新闻(mybrew)中的变量发生更改,因此如果您不希望全局范围中的变量发生更改,则必须克隆要传递到函数中的参数值。因为它是一个要传递的数组,只需执行
newBrew=array.from(abrow)即可
并传入newBrew
。阅读有关“按值传递”和“按引用传递”的内容。那会有帮助的`
lent newbrew = JSON.parse(JSON.stringify(mybrew));
bestBrew(newbrew);