function () {
    // Collect the arguments for passing
    var args = [].slice.call(arguments);

    // Run the items in order and capture the return value
    before.apply(this, args);
    var retVal = fn.apply(this, args);
    after.apply(this, args);

    // Return the return value;
    return retVal;
  }
function () {
    
    var args = [].slice.call(arguments);

    
    before.apply(this, args);
    var retVal = fn.apply(this, args);
    after.apply(this, args);

    
    return retVal;
  }
function ( ) { // Collect the arguments for passing var args = [ ] . slice . call ( arguments ) ; // Run the items in order and capture the return value before . apply ( this , args ) ; var retVal = fn . apply ( this , args ) ; after . apply ( this , args ) ; // Return the return value; return retVal ; }
Wrap fn
Wrap fn