Argument handling of defer vs. setTimeout
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 />');