當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
读书笔记----javascript函数编程
生活随笔
收集整理的這篇文章主要介紹了
读书笔记----javascript函数编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<html><head><meta charset="utf-8"><title>javascript函數編程</title><meta name="keyword" content="javascript函數編程"><meta name="discription" content="javascript函數編程">
</head><body><script>javascript函數編程第二章 一等公民的函數用一個函數把另外一個函數包起來, 目的僅僅是延遲執行, 真的是非常糟糕的編程習慣.第三章 純函數的好處好處:1 純函數是這樣一種函數, 即相同的輸入, 永遠會得到相同的輸出, 而卻沒有任何可觀察的副作用;2 使用純函數的形式, 函數就能做到自給自足;副作用:1 在計算結果的過程中, 系統狀態的一種變化, 或者與外部世界進行的可觀察的交互更新文件系統往數據庫插入數據發送一個http請求可變數據打印 / log獲取用戶數據DOM查詢訪問系統狀態追求 "純"的理由1 可緩存性var memoize = function(f) {var cache = {};return function() {var arg_str = JSON.stringify(arguments);alert(arg_str);cache[arg_str] = cache[arg_str] || f.apply(f, arguments);return cache[arg_str];}}var squreNumber = memoize(function(x) {return x * x;})squreNumber(4); //162 可移植性 / 自文檔化3 可測試性4 合理性純函數引用透明: 吐過一代代碼可以替換成他執行所得的結果, 而且是在不改變整個程序行為的前提下替換的, 那么我們就說這段代碼是引用透明的并行代碼在服務端js環境以及使用了web worker的瀏覽器那里是非常容易實現的, 因為使用了線程(thread).不過出于對非純函數復雜的奧綠, 當前主流觀點還是避免使用這種并行slice(); //保留原數組不變splice(); //截取原數組,原數組改變第四章 柯里化 curry概念: 只傳遞函數一部分參數來調用它, 讓他返回一個函數去處理剩下的參數.可以一次性的調用curry函數, 也可以每次只穿一個參數分多次調用function add(x, y) {return function(y) {return x + y;}}var a = add(1);a(2); //3只傳給函數一部分參數通常也叫做局部調用, 能夠大量減少樣板文件的代碼第五章 代碼組合var compose = function(f, g) {return function(x) {return f(g(x));}}f, g都是函數, x式他們之間通過 "管道"傳輸的值.var toUpperCase = function(x) {return x.toUpperCase();}var exclain = function(x) {return x + "!";}var shout = compose(exclain, toUpperCase)shout("Hello");范疇學:是數學中的一個抽象分支, 能夠形式化諸如集合論, 類型論, 群論, 以及邏輯學等數學分支中的一些概念.范疇學主要處理的對象, 態射和變化式.第六章 示例應用與命令式不同, 聲明式意味著我們要寫表達式, 而不是一步一步的指示//命令式var makes = [];for (i = 0; i < cars.length; i++) {makes.push(cars[i].make)}//聲明式var makes = cars.map(function(car) {return car.make;})//命令式的循環要求你必須先實例化一個數組,而且執行完成這個實例化語句之后,解析器才繼續執行后面的代碼//命令式var authenticate = function(form) {var user = toUser(form);return login(user);}//聲明式var authenticate = compose(login, touser);//雖然命令式的版本不一定就是錯的,但是還是因編碼了一種一步接著一步的執行方式.//而compose表達式只是簡單的指出這么一個事實:用戶驗證是touser和login兩個行為的//組合.這再次說明,聲明式為代碼更新提供了支持,是的我的應用代碼成為了一種高級規范第七章 Hindley - Milner 類型簽名類型簽名補單可以用于編譯時檢測, 還是最好的文檔.所以類型簽名在函數式編程中扮演著非常重要的角色//strLength :: String ->Numbervar strLength = function(s) {return s.length;}//join:: String ->[String]->Stringvar join = curry(fucntion(what, xs) {return xs.join(what);})第八章 特百惠函數式程序: 通過管道吧數據在一系列純函數之間傳遞的程序.這些程就是聲明式的行為規范var Container = function(x) {this.__value = x;}Container.of = function(x) {return new Container(x);}//Container 作為一個容器,Container.of作為構造器第九章 Monadpointed functor關于容器的of方法, 不是用老避免使用new關鍵字, 而是用來把值放到默認最小化上下文中的.of沒有真的取代構造器他是一個我們稱之為pointed的重要接口的一部分//這里關鍵是把任意的值丟到容器里然后開始導出使用map的能力IO.of("tetris").map(concat("master"));//IO("tetris master");Maybe.of(1336).map(add(1));//Map(1337);Task.of([{ id: 2 }, { id: 3 }]).map(_.prop("id"));//Task([2,3]);第十章 Applicative functorap就是這樣一種函數能夠把一個functor的函數值應用到另一個functor的值上.Container.of(add(2)).ap(Container.of(3));Container(5);//all togrther nowContainer.of(2).map(add).ap(Container.of(3));//Container(5)//本例中的add是被map局部調用的,所以add必須是一個curry函數Container.prototype.ap = function(other_container) {return other_container.map(this.__value);}</script>
</body></html>
總結:報告老板,在看懂之前我還能看{10,}遍
轉載于:https://www.cnblogs.com/SunlikeLWL/p/8681253.html
總結
以上是生活随笔為你收集整理的读书笔记----javascript函数编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python Web 框架:Django
- 下一篇: Django+xadmin打造在线教育平