diff --git a/lodash.src.js b/lodash.src.js index 81d8bbd26..abf40704c 100644 --- a/lodash.src.js +++ b/lodash.src.js @@ -10140,8 +10140,8 @@ /*------------------------------------------------------------------------*/ /** - * Attempts to invoke `func`, returning either the result or the caught - * error object. + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it is invoked. * * @static * @memberOf _ @@ -10151,9 +10151,9 @@ * @example * * // avoid throwing errors for invalid selectors - * var elements = _.attempt(function() { + * var elements = _.attempt(function(selector) { * return document.querySelectorAll(selector); - * }); + * }, '>_>'); * * if (_.isError(elements)) { * elements = []; @@ -10161,7 +10161,7 @@ */ function attempt(func) { try { - return func(); + return func.apply(undefined, baseSlice(arguments, 1)); } catch(e) { return isError(e) ? e : Error(e); } diff --git a/test/test.js b/test/test.js index 673a92ea1..ba59dfa43 100644 --- a/test/test.js +++ b/test/test.js @@ -1076,6 +1076,11 @@ strictEqual(_.attempt(_.constant('x')), 'x'); }); + test('should provide additional arguments to `func`', 1, function() { + var actual = _.attempt(function() { return slice.call(arguments); }, 1, 2); + deepEqual(actual, [1, 2]); + }); + test('should return the caught error', 1, function() { var expected = _.map(errors, _.constant(true)); @@ -3378,16 +3383,16 @@ } }); - asyncTest('should accept additional arguments', 1, function() { + asyncTest('should provide additional arguments to `func`', 1, function() { if (!(isRhino && isModularize)) { var args; _.defer(function() { args = slice.call(arguments); - }, 1, 2, 3); + }, 1, 2); setTimeout(function() { - deepEqual(args, [1, 2, 3]); + deepEqual(args, [1, 2]); QUnit.start(); }, 128); } @@ -3444,16 +3449,16 @@ } }); - asyncTest('should accept additional arguments', 1, function() { + asyncTest('should provide additional arguments to `func`', 1, function() { if (!(isRhino && isModularize)) { var args; _.delay(function() { args = slice.call(arguments); - }, 32, 1, 2, 3); + }, 32, 1, 2); setTimeout(function() { - deepEqual(args, [1, 2, 3]); + deepEqual(args, [1, 2]); QUnit.start(); }, 128); }