<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          javascript偏函數應用與柯里化的區別

          時間:?2017-12-01閱讀:?1476標簽:?柯里化

          很多剛剛了解函數式編程的人會對偏函數應用(partial application)和柯里化(currying)之間的區別感到困惑。實際上,直到現在也很少在 JavaScript 中看到柯里化的實際使用,許多叫curry()的工具函數并不是柯里化函數。它們其實是偏函數!

          如果你也不清楚區別,本文會為你梳理清楚,不過讓我們搞清楚一些詞語:

          定義

          應用: 將函數應用于參數,以得到返回值的過程。

          偏函數應用: 將函數應用于其部分參數的過程。返回的偏函數在之后被使用。也就是說,一個函數接收一個有多個參數的函數,返回一個需要較少參數的函數。偏函數將一到多個參數在內部固定,然后返回新函數,返回的函數接收剩余的參數完成函數的應用。

          柯里化: 輸入一個有多個參數的函數, 返回一個只接收單個參數的函數。

          這有什么關系呢?

          James Coglan 的演講會幫助你理解:

          James 討論的特性依賴于函數類型一致性。函數有類型。舉例來說,函數接收函數和數組,返回數組(例如,Function.prototype.map()):

          (fn, array) -> array
          
          • 偏函數應用 會也可能不會有可預期的返回類型

          • 柯里化函數始終返回另一個具有單個參數而其他參數被指定的函數。

          James 討論的重要的東西都依賴于 函數類型一致性。例如他提到 promise 可以幫助程序邏輯抽象對時間的依賴。

          Promise 可以做到是因為它提升了你調用的函數,使得其返回類型始終一致:所有返回 promise 的函數返回了相同的類型,這意味著你可以用標準化的方式來使用它們。James 提到了 promise 帶來的各種好處。

          這種情況下,promise 是 函子(functor) (一個巧妙的詞,意思是“可以被映射的東西”,例如,數組。參考:可應用的函子(applicative functor))的容器,可以為處理數據提供標準化的方法,而無需考慮數據的類型。

          警告: google 下函數式編程的術語會很嚇人,不過相比其學術名稱,它們其實很簡單。

          通過處理 容器 而非 容器中的值,你可以為任何使用 *容器接口 的東西創建很多一般的 到處可以使用的函數

          和 promise 類似,*科里化函數返回容器,這提供了相同的接口。具體是指,作為容器的返回函數。你可以繼續調用返回的函數,直到所有參數都傳入后返回最終的值。

          換句話說,柯里化函數時可以提升所有參數的函數,使得可以用標準化的方式處理這些參數。

          最常見的使用提升的方式是 函數組合(function composition),例如c(x) = f(g(x))。函數組合將一個函數的返回值傳給另一個函數作為參數。由于一個函數只能返回一個值,可以接收返回值的函數必定是一元的。

          此外,柯里化函數有內置的迭代器機制:柯里化函數每次應用一個參數,不會做超出一個參數外的工作。調用返回的函數也就是告訴函數來進行下一步處理。

          例如,柯里化函數 a(b)(c),不會立即調用 c,可以是這樣的:

          const next = a(b);
          doSomeStuff().then(() => next(c));
          

          你應該對偏函數應用和柯里化的區別,以及為什么要對函數執行柯里化有更清楚的理解了。

          柯里化在函數式編程中的最常見的應用是讓組合函數變得簡單。關于這個話題,可以看 “Master the JavaScript Interview: What is Function Composition?”

          來源:眾成翻譯


          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/206

          理解Javascript的柯里化

          函數式編程是一種如今比較流行的編程范式,它主張將函數作為參數進行傳遞,然后返回一個沒有副作用的函數,說白了,就是希望一個函數只做一件事情。這種編程思想涵蓋了三個重要的概念:

          Js之函數柯里化

          最近在社區閱讀技術博客的時候偶然間看到了函數柯里化幾個字,還有要求手寫js函數柯里化,心想是柯里化是什么高級的東西?沒聽說過啊?就帶著問題出發,專門去學習了一下,做了一些整理。

          javascript實現函數柯里化與反柯里化

          把接收多個參數的函數變換成接收一個單一參數(最初函數的第一個參數)的函數,并返回接受剩余的參數而且返回結果的新函數的技術。其由數學家Haskell Brooks Curry提出,并以curry命名。

          Js柯里化

          柯里化(Currying),又稱部分求值(Partial Evaluation),是把接收多個參數的函數變成接受一個單一參數(最初函數的第一個參數)的函數,并且返回接受剩余的參數而且返回結果的新函數的技術。

          js高級函數技巧-函數柯里化

          我們經常說在Javascript語言中,函數是“一等公民”,它們本質上是十分簡單和過程化的。可以利用函數,進行一些簡單的數據處理,return 結果,或者有一些額外的功能,需要通過使用閉包來實現,最后經常會return 匿名函數。

          js函數柯里化的延伸

          如果我們需要設計一個函數來計算每個月的開銷,在每天結束之前,我們需要記錄當天花費了多少。在月底的時候計算出這個月一共開銷了多少? 可以看出在性能上和方式二差不多,但是這樣做更加通俗易懂了,當然在實際開發中,我們一般會封裝為對象。

          柯里化與反柯里化

          柯里化,是一個逐步接收參數的過程。在接下來的剖析中,你會深刻體會到這一點。 反柯里化,是一個泛型化的過程。它使得被反柯里化的函數,可以接收更多參數。目的是創建一個更普適性的函數,可以被不同的對象使用。

          JavaScript函數柯里化

          理論計算機科學中,柯里化提供了在簡單的理論模型中,比如:只接受一個單一參數的lambda演算中,研究帶有多個參數的函數的方式。 函數柯里化的對偶是Uncurrying,一種使用匿名單參數函數來實現多參數函數的方法。

          fly63.com版權所有,內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网