Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Implement a function that allows for infinite cyrring, and can be used as such:
- `_do(fn)(2)(3)(5)(8)(22)(230)(100)(10)();`
- */
- function _do(fn) {
- var args = []
- , fn;
- function exec() {
- return args.reduce(function(prev, curr) {
- return fn && fn.call(null, prev, curr);
- });
- }
- function addArg(arg) {
- if(arg) {
- args.push(arg);
- console.log('got another arg! all args: ', args);
- return addArg;
- } else {
- console.log('time to exec!');
- return exec();
- }
- }
- if(arguments.length < 1) {
- console.log('returning _do');
- return _do;
- } else {
- console.log('got fn ', fn);
- fn = arguments[0];
- return addArg;
- }
- }
- //Sample use case:
- function add(num1, num2) {
- return num1 + num2;
- }
- _do(add)(2)(3)(5)(8)(22)(230)(100)(10)();
- // or to log: console.log(_do(add)(2)(3)(5)(8)(22)(230)(100)(10)());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement