Javascript递归参数

时间:2015-05-28 18:19:26

标签: javascript recursion

我的问题是如何将我的参数传递给新的递归级别。这是我正在做的简化版本:

var newFunction = function(obj) {
  var result = "";
  var args = [];
  Array.prototype.push.apply(args, arguments);
  var thisArg = args.shift()
  //do stuff to add onto result with thisArg. This block works, so I'm skipping.
  if (args.length !== 0) {
    result += newFunction(args);
  };
  return result;
};

我遇到的问题与#args'正在进入newFunction循环回来。在进行递归回调时,args作为单个数组参数传递到新函数作用域:

  • 原始参数=("字符串",true,9,"字符串2")
  • 递归中的新参数=([true,9,string 2])

需要:

  • 原始参数=("字符串",true,9,"字符串2")

  • 递归中的新参数=(true,9," string 2")

我非常确定这与我如何使用.apply for args变量有关。我只是不确定如何解决这个问题,因为你不能。转移()'论证'宾语。我这样做的方法是将args设置为一个数组;因此,当它被传入时,它将它作为单个数组传递。这是我的代码的问题......

你看到我做错了什么吗?提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用.apply()

result += newFunction.apply(undefined, args);

.apply()函数类似于.call,但它扩展了数组元素,以便(有效地)将数组逐个元素复制到新的arguments对象中 - 称功能。

答案 1 :(得分:1)

在ECMAScript 5中,使用apply

var newFunction = function(thisArg) {
  var result = "",
      args = [].slice.call(arguments, 1);
  // ...
  if (args.length) result += newFunction.apply(void 0, args);
  return result;
};

在ECMAScript 6中,使用rest parametersspread operator

var newFunction = function(thisArg, ...args) {
  var result = "";
  // ...
  if (args.length) result += newFunction(...args);
  return result;
};