Q:

Conditional setTimeout call

As far as a I know, there is no way to get setTimeout to run synchronously. 
I have this code, where foo is a decently long function (20 lines or so). 
if(delay == null){
  function foo(){

  }()
}
else {
   setTimeout(function(){
     function foo(){

     }()
   }, delay);
 }

what would very convenient, would be if setTimeout would accept an delay argument of -1, and then would just run synchronously/immediately, something like this:
var delay = delay || -1;

   setTimeout(function(){
     function foo(){

     }()
   }, delay);  // if delay is -1, will run immediately. 

I don't think this functionality works with setTimeout, is there another way I can prevent having to write out the foo function twice?  The only good solution I have is to create a helper function, but that's not as convenient :)

A:

Try this:
function foo(){

}
if(delay == null){
  foo();
}
else {
   setTimeout(foo, delay);
 }

A:

Is there another way I can prevent having to write out the foo function twice? 

Yep. 
Define foo:
function foo() {

}

And then run it immediately if delay === -1, otherwise in a setTimeout:
if (delay === -1)
    foo();
else
    setTimeout(foo, delay);

