I’m trying to have a function that is passed a function and calls it with a set of args. For example:
function foo(func, args) {
return func(args);
}
However, I don’t know how many elements might be in args, and func should be able to be an arbitrary function that takes any number of args. How do I deal with this?
Also say I wanted to store the functions passed to foo and only call them if they hadn’t been called before.
Can I just do something like:
var calledFuncs = [];
function foo(func, args) {
if(calledFuncs.indexOf(func) === -1) {
calledFuncs.push(func);
return func(args);
}
}
Thanks, I’m a bit new to functional programming in JavaScript.
You’re looking for
func.apply:thisvalue. You don’t want to change this, so pass it through.So you could do this:
You seem to have a fine approach to your second issue (with the
func(args)replaced). You may want to store the return value of called functions, though, sincefoonow returnsundefinedfor any calls except the first.