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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

柯理化

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

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

在普通函數中的柯理化:

var add=function(x,y){

?return x+y;

}

柯里化:

var addCurring=function(x){

?return function(y){

? return x+y;

}

}

?

addCurring(1)(2);//3

?

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

?

來一個四個參數的例子:

?

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

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

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

//只需要傳入最后一個參數即可

addCurring(4);//10

addCurring(5);//11

addCurring(6);//12

?

高階函數中:

var currying = function(fn) {

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

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

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

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

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

????????????????????//將fn在這塊上下文中執行,并且把每天的開銷當做參數傳入

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

?

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

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

????????????????????//arguments請自行google,它是一個對象并不是一個數組。

????????????????????//將arguments轉為數組后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); // 轉化成currying 函數

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

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

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

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

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

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

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

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

?

?

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

?

轉載于:https://www.cnblogs.com/fyh123/p/5990020.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。