Argument handling of defer vs. setTimeout

by thedavidmeister

JavaScript

function gogogo(argument, label) {
    document.write(label + argument + '<br />');
}
window.gogogo = gogogo;

xNow = 'Hello world.';
xLater = 'I\'ll race you..';

// Just use a closure
setTimeout(function() {
    gogogo(xNow, 'Closure: ');
});

// Send extra arguments to setTimeout()
setTimeout(gogogo, 1, xNow, 'Native: ');

// Eval()
setTimeout('window.gogogo(xNow, \'Eval: \');');

// An example of re-implementing setTimeout()
// http://www.richardcastera.com/blog/javascript-passing-multiple-parameters-through-settimeout
_st = function(fRef, mDelay) {
  if(typeof fRef == "function") {
    var argu = Array.prototype.slice.call(arguments,2);
    var f = (function(){ fRef.apply(null, argu); });
      return setTimeout(f, mDelay);
    }
  return setTimeout(fRef, mDelay);
}
_st(gogogo, 1, xNow, 'Native++: ');

// Underscore's defer()
_.defer(gogogo, xNow, 'defer: ');

xNow = xLater;
document.write('no delay: ' + xNow + '<br />');