我正在学习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
答案 0 :(得分:3)
JavaScript是一种按值传递(或者,如果您愿意,可以按值调用)语言。为函数内部的函数参数赋值新值对外界没有影响。但是,使用对象的传入引用来修改属性值 会影响外部世界。传入对数组的引用,然后该函数可以使用该引用将新值填充到数组的元素中。
您的函数返回已修改的数组,但您的调用环境会忽略该数组。改变你的考试:
var arrayValue2 = [1, 2, 3, 4, 5];
arrayValue2 = reverseArrayInPlace2(arrayValue2);
console.log("After reverseArrayInPlace2 - why is order wrong?: " + arrayValue2);
答案 1 :(得分:1)
您没有保存结果。
请改为:
var arrayValue = [1, 2, 3, 4, 5];
arrayValue = reverseArrayInPlace(arrayValue);
console.log("After reverseArrayInPlace: " + arrayValue);
var arrayValue2 = [1, 2, 3, 4, 5];
arrayValue2 = reverseArrayInPlace2(arrayValue2);
console.log("After reverseArrayInPlace2 - why is order wrong?: " + arrayValue2);
或
var arrayValue = [1, 2, 3, 4, 5];
console.log("After reverseArrayInPlace: " + reverseArrayInPlace(arrayValue));
var arrayValue2 = [1, 2, 3, 4, 5];
console.log("After reverseArrayInPlace2 - why is order wrong?: " + reverseArrayInPlace2(arrayValue2));