【问题标题】:passing a variable as a parameter and not effecting it [duplicate]将变量作为参数传递而不影响它[重复]
【发布时间】: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


【解决方案1】:

您可以对对象进行一些深度克隆。

lent newbrew = JSON.parse(JSON.stringify(mybrew));
bestBrew(newbrew);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多