javascript - 在另一个函数中返回一个函数的结果会产生错误的结果

标签 javascript arrays function

我有两个功能。一个是不纯函数,它仅返回另一个函数的结果。我对两种不同的调用方式之间的结果差异感到困惑。

功能:

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/

相关文章:

javascript - 处理 chrome 链接点击事件

javascript - 在 Node Express 中检测社交机器人

javascript - 如何从数组中获取索引 - graphql?

javascript - 使用 JavaScript 通过 for 循环搜索数组

javascript - 如何将函数分配给 Javascript 对象的属性?

javascript - 模态窗口打开时 outouchend 不删除悬停

javascript - 我想使用 javascript 单击网站上的所有 div 框

java - 寻找数组java的最佳系数变量

java - 如何创建类的对象 - 但哪个类有所不同,并且取决于其他变量

swift - 在 Swift 中使用元组重载运算符