Invoke callbacks with unknown arguments
Published on 14 November 2013 at 14:06 by
Whilst working on some instrumentation code, I had need to pass a function and an unknown number of arguments to another function which would then time the execution of that function. This turned out to be quite easy using fn.prototype.apply.
Let's say that we want to call a function but execute some other code, we'd do that here:
function invokeCallback(callback) {
var params = Array.prototype.slice.call(arguments, 1);
return callback.apply(null, params);
}
And here are our three varied functions:
function action() {
console.log('action');
}
function greet(msg) {
console.log(msg);
}
function nameage(name, age) {
var msg = 'My name is ' + name + ' and my age is ' + age;
console.log(msg);
}
And here is how we can call them dynamically without invokeCallback having to know anything about them:
invokeCallback(action);
invokeCallback(greet, 'Hello!');
invokeCallback(nameage, 'Bob', '20');
Amazing.