js函数柯里化
在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。
为什么柯里化
前端使用柯里化的用途主要是简化代码结构,提高系统的维护性,一个方法,只有一个参数,强制了功能的单一性,很自然就做到了功能内聚,降低耦合。
柯里化的优点就是降低代码的重复,提高代码的适应性。
调用形式
function add(a, b, c){};
// 对add柯里化
var newAdd = Curry(add);
newAdd(1)(2)(3);实现对add的柯里化
function add(a, b, c, d){
return a + b + c + d;
}定义函数,两个函数对参数合并
function FixedParamsCurry(fn){
// 拿到首次传入的参数
var _args = [].slice.call(arguments, 1);
return function(){
// 拿到返回函数传入的参数,两此参数合并一个数组
var newArgs = _args.concat([].slice.call(arguments, 0))
return fn.apply(this, newArgs);
}
}使用
var newAdd = FixedParamsCurry(add, 1)
newAdd(2, 3, 4)
newAdd(1, 1, 1)
FixedParamsCurry函数在两次调用中必须将参数传递完,需要实现下面的调用形式
var newAdd = Curry(add);
newAdd(1, 2, 3, 4)
newAdd(1)(2, 3, 4)
newAdd(1, 2)(3)(4)
newAdd(1, 2)(3, 4)
newAdd(1, 2, 3)(4)
newAdd(4)(1, 2, 3)
newAdd(1)(2)(3)(4) // 常用柯里化
function Curry(fn, length){
// 函数.length获取函数传递参数个数
var length = length || fn.length;
return function(){
if(arguments.length < length){
// [fn].concat([1]) [fn, 1];
var combined = [fn].concat([].slice.call(arguments, 0));
return Curry(FixedParamsCurry.apply(this, combined), length - arguments.length);
}else{
return fn.apply(this, arguments);
}
}
}使用
var newAdd = Curry(add);
// var num = newAdd(1)(2)(3)(4) // 10
// nA1缓存函数,把参数1缓存,可以服用此带参数的函数
var nA1 = newAdd(1)
var na11 = nA1(1)(1)(1)
var nA12 = nA1(3)(3)(3)应用
// 示意而已
function ajax(type, url, data){
var xhr = new XMLHttpRequest();
xhr.open(type, url, true);
}
// 虽然ajax这个函数非常通用,但在重复调用的时候参数冗余
ajax('POST'. 'www.test1.com', 'name=xiuluo');
ajax('POST'. 'www.test2.com', 'name=xiuluo');
ajax('POST'. 'www.test3.com', 'name=xiuluo');
// 利用curry
var ajaxCurry = Curry(ajax);
// 以post类型请求数据
var post = ajaxCurry('POST');
post('www.test1.com', 'name=xiuluo');
// 以POST类型请求来自于www.test1.com的数据
var postFromTest = post('www.test1.com');
postFromTest('name=xiuluo');
Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.
1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino
我一直梦想, 看到你们相册那样的地方。真棒。
我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。
我热爱这样的想法, 去那么多国家。真的很鼓舞。
能感受到热爱。继续保持 感受。
我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。
1
1
1