js 什么是函数式编程
发布时间:2025-05-21 17:53:07 发布人:远客网络
一、js 什么是函数式编程
1、写一个函数(即方法:function),然后去调用这个方法、比如写个C的helloworld然后调用printf就是函数式(过程化)编程,
2、补充:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
3、在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。
二、前端必学-函数式编程(六)
1、我们前篇谈了很多关于【闭包】的理解了,所以你应该会知道,我们现在将要谈的就是——【异步】。
2、我们为什么觉得“异步问题”复杂呢?
3、其中很重要的一个原因是——时间!时间将我们对数据的操作、管理,变复杂了好几个量级!
4、(需要特别提出并明确的是:异步和同步之间是可以相互转化的!我们使用异步或者同步取决于——如何使代码更加可读!)
5、函数式编程给出了实现“代码更可读”的落地原则(已多次回顾):
6、所以我们可以期待,异步在函数式编程中的表现!
7、 onCustomer(..)和 onOrders(..)是两个【回调函数】释义,两者执行的先后顺序并不能确定,所以它是一个基于时间的复杂状态。
8、释义:回调函数其实就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。
9、通常来说,我们最先想到的是:把 lookupOrders(..)写到 onCustomer(..)里面,那我们就可以确认 onOrders(..)会在 onCustomer(..)之后运行。
10、不对!因为 onCustomer(..)、 onOrders(..)这两个回调函数的关系更像是一种竞争关系(都是赋值 customer.orders),它们应该并行执行,而不是串行执行。
11、即:我不管你们谁先执行,谁先执行完,谁就赋值给 customer.orders!
12、不过,这样让代码又变得更加难阅读!!函数内部赋值依赖于外部变量、甚至受外部回调函数的影响。
13、最终,我们借用 JS promise减少这个时间状态,将异步转成同步:
14、两个.then(..)运行之前, lookupCustomer(..)和 lookupOrders(..)已被同步调用,满足并行执行,谁先结束,谁赋值给 customer.orders,所以我们不需要知道谁先谁后!
15、在这样的实现下,不再需要时间先后的概念!减少了时间状态!!代码的可读性更高了!!
16、这是一个积极的数组,因为它们同步(即时)地操作着离散的即时值或值的列表/结构上的值。
17、 a映射到 b,再去修改 a,b不会收到影响。
18、而这,是一个惰性的数组, mapLazy(..)本质上“监听”了数组 a,只要一个新的值添加到数组的末端(push(..)),它都会运行映射函数 v=> v* 2并把改变后的值添加到数组 b里。
19、 a映射到 b,再去修改 a,b也会修改。
20、让我们来想象这样一个数组,它不只是简单地获得值,它还是一个懒惰地接受和响应(也就是“反应”)值的数组,比如:
21、设置“懒惰的数组” a的过程是异步的!
22、 b,是 map映射后的数组,但更重要的是,b是反应性的,我们对 b加了一个类似监听器的东西。
23、这里再多小结一句:时间让异步更加复杂,函数式编程在异步下的运用就是减少或直接干掉时间状态。
24、想象下 a还可以被绑定上一些其他的事件上,比如说用户的鼠标点击事件和键盘按键事件,服务端来的 websocket消息等。
25、上述的 LazyArray又可叫做 observable!(当然,它不止用在 map方法中)
26、现在已经有各种各样的 Observables的库类,最出名的是 RxJS和 Most。
27、不仅如此,RxJS还定义了超过 100个可以在有新值添加时才触发的方法。就像数组一样。每个 Observable的方法都会返回一个新的 Observable,意味着他们是链式的。如果一个方法被调用,则它的返回值应该由输入的 Observable去返回,然后触发到输出的 Observable里,否则抛弃。
28、本篇介绍了【异步】在函数式编程中的表现。
29、原则是:对于那些异步中有时态的操作,基础的函数式编程原理就是将它们变为无时态的应用。即减少时间状态!
30、就像 promise创建了一个单一的未来值,我们可以创建一个积极的列表的值来代替像惰性的observable(事件)流的值。
31、我们介绍了 RxJS库,后续我们还会介绍更多优美的 JS函数式编程库!
32、(俗话说的好,三方库选的好,下班都很早!!)
33、现在本瓜有点明白那句话了:看一门语言是不是函数式编程,取决于它的核心库是不是函数式编程。
34、也许我们还不熟悉像 RxJS这类库,但我们慢慢就会越来越重视它们,越来越使用它们,越来越领会到它们!!
三、js函数式编程思想就是运算不改变值只是新建值吗
1、你好,你可以这样理解,函数式编程它不修改状态,因此函数式编程只是返回新的值,不修改系统变量。函数式编程思想是把运算过程尽量写成一系列嵌套的函数调用。
2、它主要是通过闭包和高阶函数等来进行编程,属于面向过程编程,强调通过函数,而不是语句来编程。