为什么函数使用不同的传递参数返回相同的输出

时间:2019-08-05 08:55:03

标签: javascript

我是JS的初学者,遇到了一个代码,如果我在此处输入不同的参数,该代码将提供相同的输出:

function addToArr(element) {
  var arr = [];
  arr.push(element);
  return element + " added to " + arr;
}

var firstPass = addToArr("a");
var secondPass = addToArr("b");
console.log(firstPass); // a added to a
console.log(secondPass); // a added to a

从上面的代码中可以看到,如果我先通过a然后又通过b,但是得到的输出是一样的吗?

2 个答案:

答案 0 :(得分:0)

在进入示例之前,我将给您一个一般性的答案:对于不同的输入,一个函数可以具有相同的返回值。例如,3为奇数,5也为奇数。如果您具有isOdd函数,则它对于3和5均应为true。

现在,您的示例:

function addToArr(element) {
  var arr = [];
  arr.push(element);
  return element + " added to " + arr;
}

var firstPass = addToArr("a");
var secondPass = addToArr("b");
console.log(firstPass); // a added to a
console.log(secondPass); // a added to a

不会给a加上a,但是至少在我第二遍时才将b添加到b。但是,您需要有一个单独的数组,如下所示:

function addToArr(arr, element) {
  var str = `[${arr.toString()}]`;
  arr.push(element);
  return element + " added to " + str;
}

var arr = [];
var firstPass = addToArr(arr, "a");
var secondPass = addToArr(arr, "b");
console.log(firstPass); // a added to a
console.log(secondPass); // a added to a

因为在函数内部声明一个空数组并向其中添加一个值没有意义。

答案 1 :(得分:-1)

如果您希望数组的添加内容“粘住”,那么一个选择是更改函数的签名以接受输入数组。然后,让该函数向该外部数组添加元素。

function addToArr(element, arr) {
  arr.push(element);
  return element + " added to " + arr;
}

var arr = [];
var firstPass = addToArr("a", arr);
var secondPass = addToArr("b", arr);
console.log(firstPass);  // a added to a
console.log(secondPass); // b added to a,b
console.log(arr);