我有两个功能。一个是不纯函数,它仅返回另一个函数的结果。我对两种不同的调用方式之间的结果差异感到困惑。
功能:
function reverseArray(array) {
var newArray = [];
for(i = 0; i < array.length; i++) {
newArray.unshift(array[i]);
}
return newArray;
}
function reverseArrayInPlace(array) {
return reverseArray(array);
}
当我打电话时:
console.log(reverseArrayInPlace(["one", "two"]));
控制台显示了我所期望的内容,即:["two", "one"]
但是当我将数组分配给变量时,将其作为参数传递,然后记录到控制台,如下所示:
var foo = ["one", "two"];
reverseArrayInPlace(foo);
console.log(foo);
我得到[“一”,“二”]
为什么后一种情况会产生与前一种不同的结果?
最佳答案
因为您的代码是“按值调用”。
当使用显式参数 foo 调用reverseArrayInPlace 时,将为函数体创建 foo 的副本。该函数不会改变原始的 foo。
为了将 foo 设置为函数的返回值,可以这样写
foo = reverseArrayInPlace(foo);
关于javascript - 在另一个函数中返回一个函数的结果会产生错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30271076/