There are a few possibilities. For the first several options, I'm (perhaps wrongly) assuming that you don't mind passing args as a single array parameter. If you want each element of args to be a separate argument to foo(), see the last example (using apply()).
Assuming you don't use this inside of foo(), here are some options:
process.nextTick(function () {
foo(args);
});
Or:
var bar = foo.bind(null, args);
process.nextTick(bar);
If you use this inside of foo(), change null in the above example to the value that you expect this to have. For example:
var bar = foo.bind(foo, args);
process.nextTick(bar);
You may also wish to look at call() and apply(). apply() is especially useful if you want to have an array (say, [1, 2, 7]) that you want spread out across the function args (that is to say, foo(1, 2, 7) instead of foo([1, 2, 7])):
process.nextTick(function () {
foo.apply(null, args);
}
As with bind(), if you use this inside of foo, then change null in the above example to be the value that you expect this to have.
Function.apply.bind( foo, null, ['arg1', 'arg2', 'arg3'])