1. Source
In computer science, currying is to transform a function that accepts multiple parameters into a function that accepts a single parameter (the first parameter of the original function), and A technique for returning a new function that accepts the remaining arguments and returns a result. This technique was named by Christopher Strachey after logician Haskell Curry, although it was invented by Moses Schnfinkel and Gottlob Frege.
2. curring(1)(2)(3)(4)() How to add parameters to get the result to be 10?
1. In fact, we only need to think about how to retain each parameter, and finally accumulate the parameters when calling? This is the focus of our thinking.
function keepParams(){var arg = [];return function params(){if(arguments.length === 0){return arg; } Array.prototype.push.apply(arg,arguments); //对apply方法不熟悉的可以去百度下return params; } }var curring = keepParams(); console.log(curring(1)(2)(3)(4)()); // [1, 2, 3, 4]
2. Through the first step, we can get the parameters. Then we can do whatever we want to do next.
How to implement addition?
3. Change the basic function
function add(){var sum = 0,l = arguments.length;for(var i = 0; i < l; i++){ sum += arguments[i]; }return sum; };function keepParams(fn){var arg = [];return function params(){if(arguments.length === 0){return fn.apply(this,arg); } Array.prototype.push.apply(arg,arguments); //对apply方法不熟悉的可以去百度下return params; } }var curring = keepParams(add);//console.log(curring(1)(2)(3)(4)()); // 10console.log(curring(1)(2,3,4)()); // 10
4. Now that the third step of addition is implemented, then multiply and divide. Wait for a series of operations to be completed. However, you need to pay attention to the use of closures. If you call the same method twice in a row.
arg will be saved in memory
console.log(curring(1)(2)(3)(4)()); // 10console.log(curring(1)(2,3,4)()); // 20
The above is the detailed content of Detailed explanation of examples of js currying. For more information, please follow other related articles on the PHP Chinese website!