curry javascript
Functions are values, and we can manipulate function values in interesting ways.
Curryingallows us to produce a new function by combining a function and an argument: var add1 = add.curry(1); document.writeln(add1(6)); // 7 Function.method('curry', function ( ) { var slice = Array.prototype.slice, args = slice.apply(arguments), that = this; return function ( ) { return that.apply(null, args.concat(slice.apply(arguments))); }; }); нашел такое в одной книжке как это вообще работает никто не обьяснит? |
1. Что делает функция add? Предположу, что слудующее:
function add() { var sum = 0, i = arguments.length; while (i--) { sum += arguments[i]; } return sum; } 2. Что делает Function.method? Скорее всего это какое-то сокращение для defineProperty и можно записать так: Function.prototype.curry = function () { var slice = Array.prototype.slice, args = slice.apply(arguments), // массив аргументов [1] that = this; // ссылка на функцию add return function () { return that.apply(null, args.concat(slice.apply(arguments))); }; }; метод curry возвращает новую функцию, которая вызывает функцию add с аргументами 1 и 6 запишу чуть более понятно: Function.prototype.curry = function () { var boundArgs = Array.from(arguments), // массив запоминающихся аргументов [1] func = this; //ссылка на функцию add return function () { var newArgs = Array.from(arguments), // массив новых аргументов [6] allArgs = boundArgs.concat(newArgs); // массив всех аргументов [1, 6] return func.apply(null, allArgs); // вызываем функцию add(1, 6) }; }; |
Часовой пояс GMT +3, время: 15:29. |