在 JavaScript 函数之后保留原始数组

Keep original array after JavaScript function

本文关键字:原始 数组 保留 之后 JavaScript 函数      更新时间:2023-09-26

我相信有一个简单的答案,尽管我只有PHP的经验。为什么当我将"pizza"数组作为"my_pizza"传递给我的函数并且只对"my_pizza"进行更改时,它会发生变化?如何保留传递给函数外部函数的原始数组?函数运行完毕后,披萨数组应该没有更改。我注意到如果我更改我的字符串变量(pie),它在函数运行后将保持不变,这与数组不同。

简而言之,我希望第一组结果与第二组结果相同。

var pizza = [];
pizza.push('crust');
pizza.push('ham');
var pie = "apple"
function bake_goods(my_pizza, my_pie){
    console.log(my_pizza);
    console.log(my_pie);
    delete my_pizza['1'];
    my_pie = "peach";
    console.log(my_pizza);
    console.log(my_pie);
}
//first run
bake_goods(pizza, pie);
//console logs
//['crust','ham']
//apple
//['crust']
//peach
//second run
bake_goods(pizza, pie);
//console logs
//['crust']
//apple
//['crust']
//peach
你应该

在函数中克隆(创建)数组的副本

function bake_goods(my_pizza, my_pie){
    var innerPizza = my_pizza.slice(0);
    console.log(innerPizza);
    console.log(my_pie);
    delete innerPizza ['1'];
    my_pie = "peach";
    console.log(innerPizza );
    console.log(my_pie);
}

数组和对象作为指向原始对象的指针传递。如果不想修改原件,则需要先制作副本。

function bake_goods(my_pizza, my_pie) {
    my_pizza = my_pizza.slice(0);
    delete my_pizza[1];
}

"pizza" 数组更改,因为该函数显然是通过引用调用的。 该函数通过内存中初始化函数外部变量的相同位置操作参数。 您可以通过创建 my_pizza 数组及其元素的副本并使用它来避免这些不需要的更改。

使用它,强制JavaScript在本地上下文中而不是在全局上下文中编辑对象,您还需要克隆对象。

function bake_goods(my_pizza, my_pie){
    this.my_pizza = my_pizza.slice(0);
    console.log(this.my_pizza);
    console.log(this.my_pie);
    delete this.my_pizza['1'];
    this.my_pie = "peach";
    console.log(this.my_pizza);
    console.log(this.my_pie);
}