2016-09-19 32 views
0

你会如何将一个无限数量的参数应用于另一个函数的参数?如何将传递给函数的任意数量的参数应用于JavaScript中另一个函数的参数?

这是我的尝试:

var callIt = function(fn) { 
    for(var i = 1; arguments.length + 1; i++){ 
     return fn(arguments[i]); 
    } 
}; 

有一个在它是用来传达问什么运动功能:

callIt(sumAll, 1); 

也许我有太多的啤酒。 ..

callIt(sumAll, 2,3) // 5 is expected but I got 2 
+0

也许'回报FN(参数[1])从参数其余功能参数分开;'解决问题了吗? – StellaMaris

+0

谢谢@StellaMaris,它通过'callIt(sumAll,1)'而不是'callIt(sumAll,2,3)'或'callIt(sumAll,4,5,6)':) –

+1

如果这是一个家庭作业练习,第一段会有提示......如果该段是你自己的,你自己已经暗示了解决方案;)我建议你“应用”它。 – Pebbl

回答

2

充分利用argument an array,取出第一个元素,使用apply

var callIt = function(fn) { 
    var args = [].slice.call(arguments); 
    return fn.apply(null, args.slice(1)); 
} 

或者从您的代码工作:

var callIt = function(fn) { 
    var args = []; 
    for(var i = 1; i < arguments.length; i++){ 
     args.push(arguments[i]); 
    } 
    return fn.apply(null, args); 
}; 
+1

谢谢@李豪 - 工作。我喜欢第一个虽然漂亮的优雅! –

+1

由于您已经在使用slice将参数对象转换为数组,因此返回fn.apply(null,[] .slice.call(arguments,1));'会更简洁。 – Pebbl

0
function show() 
     { 
      var args = Array.prototype.slice.call(arguments,1); 
      arguments[0](args); 
     } 
0
callIt(sumAll, 2,3) // 5 is expected but I got 2 

javascript的问题return从第一次迭代for环路内秒。此外,for循环没有condition,它将返回false。您可以利用rest parameter传递给callIt

var callIt = function(fn, ...args) { 
 
    var res = 0; 
 
    for(var i = 0; i < args.length; i++){ 
 
     res += fn(args[i]); 
 
    } 
 
    return res 
 
}; 
 

 
var result = callIt(function(n) { 
 
    return n 
 
}, 2,3); 
 

 
console.log(result);

相关问题