iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >javascript用函数式编程的原因是什么
  • 478
分享到

javascript用函数式编程的原因是什么

2024-04-02 19:04:59 478人浏览 泡泡鱼
摘要

这篇“javascript用函数式编程的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看

这篇“javascript用函数式编程的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascript用函数式编程的原因是什么”文章吧。

原因:1、js的语法是从Scheme这种函数式编程语言借鉴而来。2、就浏览器端而言,随着各种单页框架的发展,客户端的处理能力不断提升,越来越多的业务逻辑被放到端,从而导致客户端要维护的状态越来越多;随之而来的问题是,一不小心就会大量使用依赖于外部变量的函数,这些函数随着业务逻辑不断增加,从而导致逻辑分支剧增,状态难以追踪,代码可读性差,难以维护,而函数式编程有着很好的解决方案。

教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

一、什么是函数式编程?

函数式编程(Functional programming),简称 FP,并不是什么库或者框架,与过程式编程(Procedural programming)相对,而是一种编程范式。FP 通过声明纯函数抽象数据的处理,来避免或尽可能减少函数调用对于外部状态和系统产生的副作用。

所谓副作用,大抵有改变函数外系统状态,向外抛出异常,处理用户操作,修改入参,数据库查操作,DOM操作等等可能会引起系统错误操作。

二、为什么在 JavaScript 使用函数式编程思想

2.1 从语言特性来看

JavaScript 一开始的语法就是从 Scheme 这种函数式编程语言借鉴而来。随着语言标准的推进,语言本身的功能性不断丰富,闭包、箭头函数、高阶函数,数组迭代等等功能都让 JavaScript 中实现 FP 变得简单,简单讲几个特性:

2.1.1. lambda 表达式

lambda 表达式其实是一个匿名函数,使用箭头清晰的表示输入输出的映射关系,JavaScript 中使用箭头函数来实现。

const multiply = x => x * x
multiply(6) // 36

2.1.2 高阶函数

高阶( Higher-order )函数可以接受一个或者多个函数作为入参,输出一个函数。

简单写两个例子

const add = x => y => x + y
const add10 = add(10)
add10(5) // 15
const compose = (...fns) => x =>  fns.reduce((acc, fn) => fn(acc), x)
const a = x => x + 1
const b = x => x + 2
const composedFn = compose(a, b)
composedFn(1) // 1 + 1 + 2 = 4

2.1.3 filter map forEach reduce 迭代

Array.prototype 下的 filter map forEach reduce 都是高阶函数,因为入参是个函数。

const flatten = (arr = []) => arr.reduce(
  (acc, val)=> accconcat(Array.isArray(val) ? flatten(val) : val),
  []
)
let arr = [1,[ 4, 5 ], 2, 3];
flatten(arr)  // [1, 4, 5, 2, 3]

2.2 从实际需求角度来看

就浏览器端而言,随着各种单页框架的发展,客户端的处理能力不断提升,越来越多的业务逻辑被放到端,从而导致客户端要维护的状态越来越多。随之而来的问题是,我们一不小心就会大量使用依赖于外部变量的函数,这些函数随着业务逻辑不断增加,从而导致逻辑分支剧增,状态难以追踪,代码可读性差,难以维护,而 FP 恰恰有着很好的解决方案。

另外,现在主流的编程语言基本上都引入函数式编程的特性,即使是以面向对象著称的 java,通过使用 stream + lambda 表达式,依然可以实践函数式编程思想,而 spring5 更是将 Reactive 作为主要卖点,总之 FP 近来很火。

而 JS 的函数式编程生态也在不断丰富, RxJS, circleJS 等框架在前端产线上的应用也越来越广。

三、使用函数式的优点

使用 FP 编程主要有以下几个优点:

  • 将数据和处理逻辑分离,代码更加简洁,模块化,可读性好

  • 容易测试,测试环境容易模拟

  • 逻辑代码可复用性强

四、函数式编程相关概念

函数式编程的实现主要依赖于:

  • 声明式编程

  • 纯函数

  • 不可变数据

4.1 声明式编程

声明式编程 Declarative programming 只描述目标的性质,从而抽象出形式逻辑,告诉计算机需要计算什么而不是如何一步步计算。例如正则、sql、 FP 等。

指令式编程 Imperative Programming 告诉计算机每一步的计算操作

最简单的,相同的数组处理,使用 for 循环是指令式,用 map 之类的操作是声明式。使用声明式编程,简化了代码,提高了复用率,为重构留有余地。

4.2 纯函数

纯函数简要概括有两个特点:

  • 函数的输出只与输入有关,相同输入产生的输出一致,并不会不依赖外部条件

  • 函数调用不会改变函数域以外的状态或者变量,不会对系统产生副作用

看个简单的例子:

let counter = 0
const increment = () => ++counter
const increment = counter => ++counter

前一个函数每次调用都会修改外部变量的值,返回值也依赖于外部变量;后一个函数对于同一输入值每次返回的结果都相同,并且不会对外部状态造成影响。所以后一个是纯函数。

为什么要追求函数的纯度,这就涉及到一个称为引用透明性的概念。

4.2.1 引用透明性

纯函数的这种函数的返回值只依赖于其输入值的特性,被称为引用透明性(referential transparency),纯函数都是可以进行缓存的。

const memorize(pureFn) {
  const _cache = {}
  return (...args) => {
    const key = JSON.stringify(args)
    return _cache[key] || (_cache[key] = purFu.apply(null, args))
  }
}

4.3 Immutable Data

「可变的全局状态是万恶之源」(其实从功能代码的角度看,局部和全局是相对而言的),简而言之可变状态会让程序的运行变得不可预测,代码可读性差,难以维护。

在 JS 中,当函数入参是对象类型的数据时,我们拿到的其实是个引用,所以即使在函数内部我们也是可以修改对象内部的属性,这种情景依然会产生副作用。

所以这个时候就需要引入 Immutable 的概念。 Immutable 即 unchangeable, Immutable data在初始化创建后就不能被修改了,每次对于 Immutable data 的操作都会返回一个新的 Immutable data。 所以并不会对原来的状态形成改变(当然不是简单的深拷贝再修改)。

Immutable 比较流行的 JS 实现有 immutable-js 和 seamless-immutable; 对于 React 党来说, immutable-js 一点都不陌生, immutable-js 配合 Redux 就是一种很好的 FP 实践。

const map1 = Immutable.Map({a:1, b: {d:2}, c:3});
const map2 = map1.set('a', 50);
map1 === map2 // false
const mapb1 = map1.get('b')
const mapb2 = map2.get('b')
mapb1===mapb2 // true

以上就是关于“javascript用函数式编程的原因是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网html频道。

--结束END--

本文标题: javascript用函数式编程的原因是什么

本文链接: https://www.lsjlt.com/news/98927.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javascript用函数式编程的原因是什么
    这篇“javascript用函数式编程的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • 什么是JavaScript函数式编程
    这篇文章主要讲解了“什么是JavaScript函数式编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是JavaScript函数式编程”吧!JavaSc...
    99+
    2024-04-02
  • javascript函数式编程的用法
    本篇内容介绍了“javascript函数式编程的用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明函数式编程是一种编程范式,是一种软件开...
    99+
    2023-06-20
  • Python函数式编程是什么
    这篇文章将为大家详细讲解有关Python函数式编程是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。函数范式在命令式范式中,通过为计算机提供一系列指令然后执行它们来完成任务。在执行这些指令时,可以改变某...
    99+
    2023-06-29
  • 什么是python函数式编程
    python函数式编程是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的。但python对函数式编程只提供部分支持,且python中允许使用变量,所以python不是不...
    99+
    2024-04-02
  • JavaScript数据类型对函数式编程的影响是什么
    这篇文章主要介绍了JavaScript数据类型对函数式编程的影响是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript数据类型对函数式编程的影响是什么文章都会有所收获,下面我们一起来看看吧。J...
    99+
    2023-07-05
  • JavaScript中的函数式编程怎么应用
    本文小编为大家详细介绍“JavaScript中的函数式编程怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中的函数式编程怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。JavaS...
    99+
    2023-06-27
  • 用JavaScript实现函数式编程
    这篇文章主要讲解了“用JavaScript实现函数式编程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用JavaScript实现函数式编程”吧!函数式编程语...
    99+
    2024-04-02
  • Java8函数式编程方法是什么
    这篇“Java8函数式编程方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8函数式编程方法是什么”文章吧。什...
    99+
    2023-06-26
  • Python没有main函数的原因是什么
    为什么必须强制main函数作为入口?这些语言都是编译语言,需要将代码编译成可执行的二进制文件。为了让操作系统/引导程序找到程序的开头,需要定义这样一个函数。简而言之,需要在大量可执行的代码中定义一个至关重要的的开头。不难看出,对于这些语言来...
    99+
    2023-05-14
    Python main
  • javascript函数式编程基础
    目录一、引言二、什么是函数式编程三、纯函数(函数式编程的基石,无副作用的函数)四、函数柯里化五、函数组合六、声明式和命令式代码七、Point Free八、示例应用九、总结 一、引言...
    99+
    2024-04-02
  • JavaScript 中的函数式编程:为什么它比常规编程更好?
    JavaScript 是一种脚本语言,它被广泛应用于 Web 开发中。在 JavaScript 中,函数式编程已经成为了一种流行的编程风格。而这种编程风格相较于常规编程风格,具有更高的可维护性、可重用性和可测试性。在本文中,我们将探讨 J...
    99+
    2023-11-05
    编程算法 函数 javascript
  • 从历史讲起JavaScript基因里的函数式编程实例
    目录本篇序言一、数学之美二、lambda 演算核心三、JavaScript 的基因本篇序言 本瓜很喜欢看历史,读史可知兴替、使人明智,作为程序员看“技术的演替历史&rdq...
    99+
    2022-11-13
    JavaScript基因函数式编程 JavaScript 函数式编程
  • 嵌入式用linux的原因是什么
    今天小编给大家分享一下嵌入式用linux的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。原因:1、Linux支持丰...
    99+
    2023-07-02
  • Python中的函数式编程的方法是什么
    这篇文章主要介绍“Python中的函数式编程的方法是什么”,在日常操作中,相信很多人在Python中的函数式编程的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中的函数式编程的方法是什么...
    99+
    2023-06-16
  • JavaScript要封装的原因是什么
    这篇文章主要介绍“JavaScript要封装的原因是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript要封装的原因是什么”文章能帮助大家解决问题...
    99+
    2024-04-02
  • Python中没有main函数的原因是什么
    Python中没有main函数的原因是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为什么必须强制执行主函数这些语言是已编译的语言,需要将代码编译到可执行的二进制文件中,以...
    99+
    2023-06-16
  • react推荐函数组件的原因是什么
    这篇文章主要讲解了“react推荐函数组件的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“react推荐函数组件的原因是什么”吧!原因:1、函数组件语法更短、更简单,这使得它更容易...
    99+
    2023-07-04
  • 在javascript中使用alert函数出现中文会乱码的原因是什么
    在javascript中使用alert函数出现中文会乱码的原因是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。可能原因一:javascript如果是写在一个...
    99+
    2023-06-14
  • golang函数式编程的未来趋势是什么?
    函数式编程在 go 语言中正变得流行,它提供更简洁、更可预测的代码。函数式编程的核心概念是使用纯函数,这些函数给定相同的输入总是返回相同的结果,并且没有副作用。go 提供了一流函数、匿名...
    99+
    2024-04-30
    golang 函数式编程
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作