① js 什么是函数式编程
写一个函数(即方法:function),然后去调用这个方法、比如写个C的helloworld然后调用printf就是函数式(过程化)编程,
补充:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
② 《函数式编程思维》pdf下载在线阅读,求百度网盘云资源
《函数式编程思维_-_Neal_Ford.epub》网络网盘免费下载:
链接: https://pan..com/s/1p8L4fcpx5odA8Is2nrf6Jg
③ 《学习JavaScript数据结构与算法(第2版)》pdf下载在线阅读全文,求百度网盘云资源
《学习JavaScript数据结构与算法(第2版)》([巴西] Loiane Groner)电子书网盘下载免费在线阅读
链接:
书名:学习JavaScript数据结构与算法(第2版)
作者:[巴西] Loiane Groner
译者:邓钢
豆瓣评分:7.3
出版社:人民邮电出版社
出版年份:2017-9
页数:232
内容简介:
本书首先介绍了JavaScript 语言的基础知识以及ES6 和ES7 中引入的新功能,接下来讨论了数组、栈、队列、链表、集合、字典、散列表、树、图等数据结构,之后探讨了各种排序和搜索算法,包括冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序、顺序搜索、二分搜索,然后介绍了动态规划和贪心算法等常用的高级算法以及函数式编程,最后还介绍了如何计算算法的复杂度。
作者简介:
Loiane Groner
花旗银行软件开发经理,负责海外项目的开发和团队管理;原IBM公司系统分析师及团队负责人;巴西坎皮纳斯Java用户组(CampinasJUG)领导者、圣埃斯皮里图Java用户组(ESJUG)协调人;巴西各大型技术会议特邀发言人;Sencha和Java技术布道者,通过博客(http://loianegroner.com)为软件开发社区撰稿,发表关于IT职业发展和常用开发技术的文章和视频。另着有《精通Ext JS》等书。
④ 《JavaScript设计模式与开发实践》pdf下载在线阅读全文,求百度网盘云资源
《JavaScript设计模式与开发实践》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1UMDDphTVYWb5jhVl82IU5w
⑤ 《JavaScript函数式编程》epub下载在线阅读全文,求百度网盘云资源
《JavaScript函数式编程》([美]Michael Fogus)电子书网盘下载免费在线阅读
链接:https://pan..com/s/1oxGfq6jXzct5Me-6i_oKfA
书名:JavaScript函数式编程
豆瓣评分:6.6
作者:[美]Michael Fogus
出版社:人民邮电出版社
原作名:Functional JavaScript
译者:欧阳继超/王妮
出版年:2015-8
页数:204
内容简介
JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。
全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多函数式JavaScript。
本书内容全面,示例丰富,适合想要了解函数式编程的JavaScript程序员和学习JavaScript的函数式程序员阅读。
作者简介
Michael Fogus是Dynamic Animation Systems的软件架构师,在分布式仿真、机器视觉和专家系统建设方面经验丰富。他是Clojure、ClojureScript以及Underscore-contrib的贡献者,还是《Clojure编程乐趣》的作者。
⑥ 《JavaScript语言精髓与编程实践第三版周爱民》pdf下载在线阅读全文,求百度网盘云资源
《JavaScript语言精髓与编程实践第三版周爱民》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1S1JmDFZqAZwKSEcTx994Kw
⑦ 前端必学-函数式编程(六)
我们前篇谈了很多关于【闭包】的理解了,所以你应该会知道,我们现在将要谈的就是 ——【异步】。
我们为什么觉得“异步问题”复杂呢?
其中很重要的一个原因是 —— 时间!时间将我们对数据的操判运作、管理,变复杂了好几个量级!
(需要特别提出并明确的是: 异步和同步之间是可以相互转化的! 我们使用异步或者同步取决于 —— 如何使代码更加可读!)
函数式编程给出了实现“代码更可读”的落地原则(已多次回顾):
所以我们可以期待,异步在函数式编程中的表现!
上代码:
onCustomer(..) 和 onOrders(..) 是两个【回调函数】释义,两者执行的先后顺序并不能确定,所以它是一个基于时间掘唤梁的复杂状态。
释义:回调函数其实就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。
通常来说,我们最先想到的是:把 lookupOrders(..) 写到 onCustomer(..) 里面,那我们就可以确认 onOrders(..) 会在 onCustomer(..) 之后运行。
这样写,对吗?
不对!因为 onCustomer(..) 、 onOrders(..) 这两个回调函数的关系更像是一种竞争关系(都是赋值 customer.orders ), 它们应该并行执行 , 而不是串行执行 。
即:我不管你们谁先执行,谁先执行完,谁就赋值给 customer.orders !
那我们的思路应该是:
不过,这样让代码又变得更加难阅读!!函数内部赋值依赖于外部变量、甚至受外部回调函数的影响。
那究竟怎么办呢?
最终,我们借用 JS promise 减少这个时间状态,将异步转成同步:
两个 .then(..) 运行之前, lookupCustomer(..) 和 lookupOrders(..) 已被同步调用,满足并行执行,谁先结束,谁赋值给 customer.orders ,所以我们不需要知道谁先谁后!
在这样的实现下,不再需要时间先后的概念!减少了时间状态!!代码的可读性更高了!!
这是一个 积极的数组 ,因为它们同步(即时)地操作着离散的即时值或值的列表/结构上的值。
什么意思?
a 映射到 b,再去修改 a ,b 不会收到影响。
而这,是一个 惰性的数组 , mapLazy(..) 本质上 “监听” 了数组 a,只要一个新的值添加到数组的末端(push(..)),它都会运行映射函数 v => v * 2 并把改变后的值添加到数组 b 里。
什么意思?
a 映射到 b,再去修改 a ,b 也会修改。
原来,后者存在 异步 的概念。
让我们来想象这样一个链樱数组,它不只是简单地获得值,它还是一个懒惰地接受和响应(也就是“反应”)值的数组,比如:
设置“懒惰的数组” a 的过程是异步的!
b ,是 map 映射后的数组,但更重要的是,b 是 反应性 的,我们对 b 加了一个类似监听器的东西。
这里直接给出解答:
这里再多小结一句:时间让异步更加复杂,函数式编程在异步下的运用就是减少或直接干掉时间状态。
想象下 a 还可以被绑定上一些其他的事件上,比如说用户的鼠标点击事件和键盘按键事件,服务端来的 websocket 消息等。
上述的 LazyArray 又可叫做 observable !(当然,它不止用在 map 方法中)
现在已经有各种各样的 Observables 的库类,最出名的是 RxJS 和 Most 。
以 RxJS 为例:
不仅如此,RxJS 还定义了超过 100 个可以在有新值添加时才触发的方法。就像数组一样。每个 Observable 的方法都会返回一个新的 Observable,意味着他们是链式的。如果一个方法被调用,则它的返回值应该由输入的 Observable 去返回,然后触发到输出的 Observable里,否则抛弃。
比如:
本篇介绍了【异步】在函数式编程中的表现。
原则是:对于那些异步中有时态的操作,基础的函数式编程原理就是将它们变为无时态的应用。即 减少时间状态 !
就像 promise 创建了一个单一的未来值,我们可以创建一个积极的列表的值来代替像惰性的observable(事件)流的值。
我们介绍了 RxJS 库,后续我们还会介绍更多优美的 JS 函数式编程库!
(俗话说的好,三方库选的好,下班都很早!!)
现在本瓜有点明白那句话了:看一门语言是不是函数式编程,取决于它的核心库是不是函数式编程。
也许我们还不熟悉像 RxJS 这类库,但我们慢慢就会越来越重视它们,越来越使用它们,越来越领会到它们!!
异步,以上。