javascript的函数类型(javascript函数如何定义及其作用)

目前主流的编程风格有三种主要形式:面向过程编程、面向对象编程、函数式编程。
面向过程编程:最常见,就是用代码描述你要实现的功能和步骤;
面向对象编程:最主流的编程范式,把数据和方法组合成对象,使代码有复用性、维护性;
函数式编程:使用函数作为基础来描述程序,它是通过连续表达式运算来求值的语言。
不同的编程风格有不同的标准,对于不同语言来讲「风格」是没有标准的。
因为对于一种语言来说,某种风格可能是非常漂亮的,但对于另一种语言来说,可能无法去实现这种风格。
所以,我们不必拘于「代码」风格。
函数式语言环境
命令式:冯.诺依曼体系是具有存储系统的计算机体系,依赖内存进行运算,这种语言强调存储和指令,它的特点是关注过程。例如:jQuery。
声明式:阿隆左.丘奇提出的运算系统更加触达本质,其基础是「以函数为参数和返回值」的函数,语言强调运算过程,依赖系统的运算特性。
我们从面向过程、面向对象一路走来,是在冯.诺依曼的的体系上发展,在这个体系中,我们认为:运算数是一定要先放到寄存器的,然后再参与 CPU 的运算。
而我们的面向过程、面向对象的开发方式,一直是在冯诺依曼体系上发展。为了获得特别的计算能力或者编程特性,这些语言在逻辑层实现了一种适用于函数式语言范型的环境。
函数式编程其实是一组运算的封装,返回一个供后续运算的值。在函数式语言中「函数」并不是真正的精髓,真正的精髓在于「运算」,而函数只是封装运算的一种手段。
什么是函数式语言

其实并不是一种语言支持函数,这种语言就叫「函数式语言」,函数式语言中的函数除了能被调用之外,还具有其他三个方法的性质「操作数、可保存数据、无副作用」。

函数是操作数
当函数也是参数的时候,它就只有操作数的含义了,与普通参数并没有什么特别不同。
函数内保存数据
函数内部的局部变量在执行期间被临时分配在栈上,执行结束后就被释放,被垃圾回收掉,通常是不能被保存的,但 JavaScript 提供了「闭包」使函数内局部变量可以被修改,并可以持续保持。
函数内的运算对外无副作用
JavaScript 支持纯函数,输入相同的数据,输出的数据也相同,并且对外部数据,不做任何修改。不过 JavaScript 允许内部引用引用和修改全局变量,甚至可以声明全局变量,所以,我们只能通过开发人员的习惯来实现这一特性。

JavaScript 中的函数是完全满足这三个特性的,这才是它能够称为「函数式语言」的原因。

函数式语言特性:连续运算
连续运算是「函数式语言」代码风格所表达的基本语言特性之一。运算一个输入,产生一个输出;输出的结果是下一个运算的输入。
在连续运算的过程中,无须中间变量来「存储」。从理论上来说,函数式语言在运算过程中不需要变量赋值。下面是 JavaScript 中几种连续运算:
连续赋值
a = b = c = 100;
表达式 c = 100,先被运算,产生返回值,运算的结果为 100,然后该值参与下一个运算 b = 100,这样就得到了连续赋值的效果。
注意 a、b、c 的作用域是全局作用域。
三元表达式
a ? 100 : 200
三元表达式推荐连用,这样可以充分发挥「连续运算」的特性。
连续逻辑运算「短路运算」
child = LC || RC || 0;
在代码中,等号右边表达式的意思是:如果 LC 的值为真或者能被转成 true 值,则运算返回 LC 的实际值,否则,如果RC 的值为真,则返回 RC 的实际值,否则返回 0 ,也就是返回最后一个操作数的实际值。
逗号运算符
1,2,3
先执行
1,2
输出的结果是2,然后与后一个操作数构成新的表达式,最终输出3。
解构赋值
通常解构是独立的运算:
let { x, y } = { x: 100, y: 200 }
这在语法上只用了一个表达式,而且不存在连用。如果改成嵌套赋值,就是连续运算了。
let { x, y: { z, n: y } } = { x: 100, y: { z: 200 } }

先解构 y 的值,再解构 z 的值,也是连续赋值的一种。

首先要支持函数式语言的环境,其次语言本身能满足「操作数、保存数据、无副作用」三个特性,再然后我们在编码中使用连续运算的逻辑,这就是函数式语言的全部。

当然最最最重要的是函数式编程的思想,在开发中也不必先苛求全部转成函数式编程,拿 Vue3 来说,它的源码是一种面向对象和函数式相结合的编程风格。


图片授权基于 www.pixabay.com 相关协议
内容来源于《JavaScript 语言精髓与编程实战》

原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34544.html

(0)
小道研究's avatar小道研究
上一篇 2024年4月18日 下午1:48
下一篇 2024年4月18日 下午1:50

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注