日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

柯理化

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 柯理化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在JS中柯里化就是把一個需要傳入多個參數(shù)的函數(shù)變成多個嵌套的只要傳入一個參數(shù)的函數(shù)

在普通函數(shù)中的柯理化:

var add=function(x,y){

?return x+y;

}

柯里化:

var addCurring=function(x){

?return function(y){

? return x+y;

}

}

?

addCurring(1)(2);//3

?

如果是多個參數(shù)就會有多層嵌套,相當(dāng)于把一個函數(shù)拆分成多個部分,通過組合得到完整的函數(shù),其實柯里化和前端框架的組件思想相同,都是模塊化思想。

?

來一個四個參數(shù)的例子:

?

var add=function(a,b,c,d){

? console.log(a+b+c+d);

}

柯里化后:

var addCurring=function(a){

return function(b){

return function(c){

return function(d){

console.log(a+b+c+d);//這里寫的是邏輯代碼,我這里用打印代替

}

}

}

}

var addCurring1=addCurring(1);

var addCurring2=addCurring1(2);

var addCurring3=addCurring2(3);

var addCurring4=addCurring3(4);// 10

如果前面幾個參數(shù)都是固定的情況可以這樣解決:

var addCurring=addCurring(1)(2)(3);

//只需要傳入最后一個參數(shù)即可

addCurring(4);//10

addCurring(5);//11

addCurring(6);//12

?

高階函數(shù)中:

var currying = function(fn) {

????????????//這里保存每次的開銷

????????????var args = [];

????????????return function() {

????????????????//如果傳入的參數(shù)長度為0,也就是沒有傳參的情況下,其實就是告訴程序,我要/求總開銷了

????????????????if (arguments.length === 0) {

????????????????????//將fn在這塊上下文中執(zhí)行,并且把每天的開銷當(dāng)做參數(shù)傳入

????????????????????return fn.apply(this, args);

?

????????????????//有參數(shù)傳入的話,就說明還在記錄每天的開銷,并沒有要/求總開銷

????????????????} else {

????????????????????//arguments請自行g(shù)oogle,它是一個對象并不是一個數(shù)組。

????????????????????//將arguments轉(zhuǎn)為數(shù)組后push到args

????????????????????//也就是收到每天的開銷后,保存到args中

????????????????????[].push.apply(args, arguments);

????????????????????//把這塊上下文再次return出去

????????????????????return arguments.callee;

????????????????}

????????????}

????????};

????????var cost = (function() {

????????????//典型的閉包,將money保存起來

????????????var money = 0;

????????????//這里就是currying(fn)中的fn

????????????return function() {

????????????????//arguments其實就是currying中的args

????????????????//收到了求總開銷的命令,下面是真正計算總開銷的地方

????????????????for (var i = 0, l = arguments.length; i < l; i++) {

????????????????????money += arguments[i];

????????????????}

????????????????return money;

????????????}

????????})();

????????var cost = currying(cost); // 轉(zhuǎn)化成currying 函數(shù)

????????cost(100); // 未真正求值

????????cost(200); // 未真正求值

????????cost(300); // 未真正求值

????????cost(200); // 未真正求值

????????cost(200); // 未真正求值

????????cost(50); // 未真正求值

????????cost(100); // 未真正求值

????????alert(cost()); // 求值并輸出:600

?

?

總而言之,柯里化就是使用了功能化的思想來處理函數(shù)多個參數(shù)的情況,從而提高代碼的可閱讀性以及可維護性

?

轉(zhuǎn)載于:https://www.cnblogs.com/fyh123/p/5990020.html

總結(jié)

以上是生活随笔為你收集整理的柯理化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。