国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS手動實現柯里化(curry)函數

Pluser / 1463人閱讀

摘要:實現效果實現思路通過閉包的方式儲存傳入參數通過函數的屬性獲得參數個數當參數個數不夠時直接返回方法存儲的參數個數等于原函數參數個數時執行原函數如果使用參數默認值,將不等于實際參數個數參數由獲取,直接使用參數實現源碼實現獲取原函數的參數個數存儲

實現效果
const curry_fn = curry(fn);
fn(1, 2, 3) == curry_fn(1)(2)(3);
實現思路

通過閉包的方式儲存傳入參數

通過函數的length屬性獲得參數個數

當參數個數不夠時直接返回方法

存儲的參數個數等于原函數參數個數時執行原函數

如果使用ES6參數默認值,length將不等于實際參數個數

參數由arguments獲取,ES6直接使用rest參數實現

源碼實現
function curry(fn) {
    var length = fn.length; //獲取原函數的參數個數
    var args = []; // args存儲傳入參數
    return function curryFn() {
        // 將arguments轉換成數組
        var curryArgs = Array.prototype.slice.call(arguments); 
        args = args.concat(curryArgs);
        if (args.length > length) {
            throw new Error("arguments length error")
        }
        // 存儲的參數個數等于原函數參數個數時執行原函數
        if (args.length === length) {
            return fn.apply(null, args);
        }
        // 否則繼續返回函數
        return curryFn;
    };
}
ES6版
function curry(fn) {
    let length = fn.length;
    let args = [];
    return function curryFn(...curryArgs) {
        args = args.concat(curryArgs);
        if (args.length > length) {
            throw new Error("arguments length error")
        }
        if (args.length === length) {
            return fn(...args);
        }
        return curryFn;
    }
}
更多文章 yjy5264.github.io

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108700.html

相關文章

  • 翻譯連載 | JavaScript 輕量級函數式編程-第3章:管理函數的輸入 |《你不知道的JS》姊

    摘要:但是,對函數式編程而言,這個行為的重要性是毋庸置疑的。關于該模式更正式的說法是偏函數嚴格來講是一個減少函數參數個數的過程這里的參數個數指的是希望傳入的形參的數量。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關于譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;分享,是...

    xiaowugui666 評論0 收藏0
  • JS中的柯里

    摘要:作為函數式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。個人理解不知道對不對延遲執行柯里化的另一個應用場景是延遲執行。不斷的柯里化,累積傳入的參數,最后執行。 作為函數式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 這里可以對照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡介 柯里化(Currying),又稱部分求值(Partial Evalu...

    Hancock_Xu 評論0 收藏0
  • js 擴展 -- currying 柯里函數

    摘要:里也有柯里化的實現,只是平時沒有在意。如果函數柯里化后雖然生搬硬套,不過現實業務也會有類似場景。 柯里化 先解釋下什么是 柯里化 在計算機科學中,柯里化(英語:Currying),又譯為卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數而且返回結果的新函數的技術。 js 里也有柯里化的實現,只是平時沒有在意。先把原文簡介貼...

    Pocher 評論0 收藏0
  • JS中的柯里 及 精巧的自動柯里實現

    摘要:笑中自動柯里化的精巧實現柯里化是函數式編程中很重要的一環,很多函數式語言都會默認將函數自動柯里化。 什么是柯里化? 在計算機科學中,柯里化(Currying)是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受余下的參數且返回結果的新函數的技術。這個技術由 Christopher Strachey 以邏輯學家 Haskell Curry 命名的,盡管...

    moven_j 評論0 收藏0
  • 高級函數技巧-函數柯里

    摘要:如果你對函數式編程有一定了解,函數柯里化是不可或缺的,利用函數柯里化,可以在開發中非常優雅的處理復雜邏輯。同樣先看簡單版本的方法,以方法為例,代碼來自高級程序設計加強版實現上面函數,可以換成任何其他函數,經過函數處理,都可以轉成柯里化函數。 我們經常說在Javascript語言中,函數是一等公民,它們本質上是十分簡單和過程化的??梢岳煤瘮担M行一些簡單的數據處理,return 結果,...

    shixinzhang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<