I do the following a lot (setTimeout as a relevant example):
setTimeout(
(function(scope){
return function(){scope.fire();};
})(this), 500
);
The short explanation is you return a function from an immediately-executing anonymous function that takes the current scope as a parameter.