// arguments isn't an Array, so this doesn't work: function capture() { var args = arguments.slice(0); // ... } // instead, steal the 'slice' method from an instance of Array, // and apply it: function capture() { var args = [].slice.call(arguments, 0); // ... } // or just take it from Array's prototype function capture() { var args = Array.prototype.slice.call(arguments, 0); // ... }