我的问题是如何将我的参数传递给新的递归级别。这是我正在做的简化版本:
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")
我非常确定这与我如何使用.apply for args变量有关。我只是不确定如何解决这个问题,因为你不能。转移()'论证'宾语。我这样做的方法是将args设置为一个数组;因此,当它被传入时,它将它作为单个数组传递。这是我的代码的问题......
你看到我做错了什么吗?提前致谢。
答案 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 parameters和spread operator,
var newFunction = function(thisArg, ...args) {
var result = "";
// ...
if (args.length) result += newFunction(...args);
return result;
};