gpt4 book ai didi

javascript - 为什么在函数中覆盖整个数组不会替换它,但逐个元素覆盖却可以?

转载 作者:行者123 更新时间:2023-11-28 15:20:02 25 4
gpt4 key购买 nike

我正在学习 JavaScript。其中一个练习是编写一个函数,覆盖作为参数传入的数组中的值。我的解决方案在函数内有效,但它似乎没有从函数传回。另外,如果我做不在函数中的同样的事情,它也会起作用。在弄清楚问题所在之后,我编写了解决方案的简化版本和有效版本。但我还是不明白为什么一个有效,一个无效。有人可以解释一下吗?

谢谢

function reverseArrayInPlace(ary){                                
// This version is successful
ary[0] = 5;
ary[1] = 4;
ary[2] = 3;
ary[3] = 2;
ary[4] = 1;
console.log("Within reverseArrayInPlace: " + ary);
return ary;
}

function reverseArrayInPlace2(ary){
// This version is not successful
ary = [5, 4, 3, 2, 1];
console.log("Within reverseArrayInPlace2: " + ary);
return ary;
}

var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log("After reverseArrayInPlace: " + arrayValue);

var arrayValue2 = [1, 2, 3, 4, 5];
reverseArrayInPlace2(arrayValue2);
console.log("After reverseArrayInPlace2 - why is order wrong?: " + arrayValue2);

// But this works.
arrayValue2 = [5, 4, 3, 2, 1];
console.log("After outer replace of arrayValue2: " + arrayValue2);

结果:

在reverseArrayInPlace内:5,4,3,2,1

reverseArrayInPlace 之后:5,4,3,2,1

在reverseArrayInPlace2内:5,4,3,2,1

reverseArrayInPlace2之后 - 为什么顺序错误?:1,2,3,4,5

外部替换 arrayValue2 后:5,4,3,2,1

最佳答案

JavaScript 是一种按值传递(或按值调用,如果您愿意的话)语言。在函数内部为函数参数分配新值对外界没有影响。但是,使用对对象的传入引用来修改属性值确实会影响外部世界。您传入对数组的引用,然后该函数可以使用该引用将新值填充到数组的元素中。

您的函数返回修改后的数组,但您的调用环境会忽略它。更改您的测试:

var arrayValue2 = [1, 2, 3, 4, 5];                                
arrayValue2 = reverseArrayInPlace2(arrayValue2);
console.log("After reverseArrayInPlace2 - why is order wrong?: " + arrayValue2);

关于javascript - 为什么在函数中覆盖整个数组不会替换它,但逐个元素覆盖却可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31909838/

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