diff --git a/lodash.js b/lodash.js index d3f048af0..a045e7c98 100644 --- a/lodash.js +++ b/lodash.js @@ -3527,13 +3527,16 @@ if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) { throw new TypeError(FUNC_ERROR_TEXT); } - var length = transforms.length; + var funcsLength = transforms.length; return restParam(function(args) { - var index = nativeMin(args.length, length); - while (index--) { - args[index] = transforms[index].apply(this, resolver(args[index], index, args)); + var index = -1, + length = nativeMin(args.length, funcsLength), + modded = copyArray(args); + + while (++index < length) { + modded[index] = transforms[index].apply(this, resolver(args[index], index, args)); } - return func.apply(this, args); + return func.apply(this, modded); }); }); } diff --git a/test/test.js b/test/test.js index eac16e5aa..9e9f407c2 100644 --- a/test/test.js +++ b/test/test.js @@ -11120,6 +11120,15 @@ deepEqual(modded(5), [10]); }); + test('should provide the correct argument to each transform', 1, function() { + var argsList = [], + transform = function() { argsList.push(slice.call(arguments)); }, + modded = _.modArgs(_.noop, transform, transform, transform); + + modded('a', 'b', 'c'); + deepEqual(argsList, [['a'], ['b'], ['c']]); + }); + test('should use `this` binding of function for transforms', 1, function() { var modded = _.modArgs(function(x) { return this[x];