Advertisement
Guest User

Untitled

a guest
Jul 3rd, 2015
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.82 KB | None | 0 0
  1. /*
  2. Implement a function that allows for infinite cyrring, and can be used as such:
  3. `_do(fn)(2)(3)(5)(8)(22)(230)(100)(10)();`
  4. */
  5.  
  6. function _do(fn) {
  7.  
  8. var args = []
  9. , fn;
  10.  
  11. function exec() {
  12. return args.reduce(function(prev, curr) {
  13. return fn && fn.call(null, prev, curr);
  14. });
  15. }
  16.  
  17. function addArg(arg) {
  18. if(arg) {
  19. args.push(arg);
  20. console.log('got another arg! all args: ', args);
  21. return addArg;
  22. } else {
  23. console.log('time to exec!');
  24. return exec();
  25. }
  26. }
  27.  
  28. if(arguments.length < 1) {
  29. console.log('returning _do');
  30. return _do;
  31. } else {
  32. console.log('got fn ', fn);
  33. fn = arguments[0];
  34. return addArg;
  35. }
  36.  
  37. }
  38.  
  39.  
  40. //Sample use case:
  41.  
  42. function add(num1, num2) {
  43. return num1 + num2;
  44. }
  45. _do(add)(2)(3)(5)(8)(22)(230)(100)(10)();
  46.  
  47. // 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