Home > Web Front-end > JS Tutorial > body text

Detailed explanation of JavaScript function currying

PHP中文网
Release: 2017-04-01 15:08:01
Original
2119 people have browsed it

What is currying

Currying is a conversion process that transforms a function that accepts multiple parameters Becomes a function that accepts a single parameter (Annotation: the first parameter of the original function). If other parameters are necessary, returns a new function that accepts the remaining parameters and returns the result.

Ke Lihua function idea: a js pre-processing idea; the principle of using function execution to form a scope that is not destroyed, Store all the content that needs to be pre-processed in this scope that is not destroyed, and return a small function. From now on, we will execute small functions. In the small function, we can perform relevant operations on the previously stored values;

The currying function mainly plays the role of preprocessing;

The role of the bind method: Pass in This in the callback method is pre-processed as context;

bind method implementation principle 1 The code is as follows:

/**
* bind方法实现原理1
* @param callback [Function] 回调函数
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
function bind(callback,context) {
var outerArg = Array.prototype.slice.call(arguments,2);
// 表示取当前作用域中传的参数中除了fn,context以外后面的参数;
return function (){
var innerArg = Array.prototype.slice.call(arguments,0);//表示取当前作用域中所有的arguments参数;
callback.apply(context,outerArg.concat(innerArg));
}
}
Copy after login

The following piece of code imitates the binding implementation principle on the prototype chain

/**
* 模仿在原型链上的bind实现原理(柯理化函数思想)
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
Function.prototype.mybind = function mybind (context) {
var _this = this;
var outArg = Array.prototype.slice.call(arguments,1);
// 兼容情况下
if('bind' in Function.prototype) {
return this.bind.apply(this,[context].concat(outArg));
}
// 不兼容情况下
return function () {
var inArg = Array.prototype.slice.call(arguments,0);
inArg.length === 0?inArg[inArg.length]=window.event:null;
var arg = outArg.concat(inArg);
_this.apply(context,arg);
}
}
Copy after login

Function currying (Currying)

in In computer science, currying is a technique that transforms a function that accepts multiple parameters into a function that accepts a single parameter (the first parameter of the original function), and returns a new function that accepts the remaining parameters and returns a result

Currying is to pass in certain parameters in advance to get a simple function. But the parameters passed in beforehand are saved in the closure, so there will be some peculiar characteristics. For example:

Example:

var adder = function(num) {
return function(y) {
return num + y;
}
}
var inc = adder(1);
var dec = adder(-1);
//inc, dec现在是两个新的函数,作用是将传入的参数值(+/-)1
alert(inc(99));//100
alert(dec(101));//100
alert(adder(100)(2));//102
alert(adder(2)(100));//102
Copy after login

The above is the detailed explanation of JavaScript function currying. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template