达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心 达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心
媒体报道
 当前位置:主页 > 媒体报道 >

JavaScript编程开发环境下的函数式编程入门

时间:2019-05-09  来源:未知  作者:广州达内培训

随着互联网的不断发展,函数式编程开发形式被众多程序员所掌握。今天我们就一起来了解一下,JavaScript编程开发环境下的函数式编程有哪些特点。

JavaScript编程开发环境下的函数式编程入门

函数式编程的定义

函数是一段可以通过其名称被调用的代码。它可以接受参数,并返回值。

与面向对象编程(Object-oriented programming)和过程式编程(Procedural programming)一样,函数式编程(Functional programming)也是一种编程范式。我们能够以此创建仅依赖输入就可以完成自身逻辑的函数。这保证了当函数被多次调用时仍然返回相同的结果(引用透明性)。函数不会改变任何外部环境的变量,这将产生可缓存的,可测试的代码库。

并发代码: 并发运行的时候,如果依赖了全局数据,要保证数据一致,必须同步,而且必要时需要锁机制。遵循引用透明的函数只依赖参数的输入,所以可以自由的运行。

缓存: 由于函数会为给定的输入返回相同的值,实际上我们就能缓存它了。比如实现一个计算给定数值的阶乘的函数,我们就可以把每次阶乘的结果缓存下来,下一次直接用,就不用计算了。比如一次输入5,结果是120,二次输入5,我们知道结果必然是120,所以就可以返回已缓存的值,而不必再计算一次。

JavaScript中函数是一等公民(First Class Citizens)

当一门语言允许函数作为任何其他数据类型使用时,函数被称为一等公民。也就是说函数可被赋值给变量,作为参数传递,也可被其他函数返回。

函数作为JavaScript的一种数据类型,由于函数是类似String的数据类型,所以我们能把函数存入一个变量,能够作为函数的参数进行传递。所以JavaScript中函数是一等公民。

高阶函数的定义

接受另一个函数作为其参数的函数称为高阶函数(Higher-Order-Function),或者说高阶函数是接受函数作为参数并且/或者返回函数作为输出的函数。

抽象和高阶函数

一般而言,高阶函数通常用于抽象通用的问题,换句话说,高阶函数就是定义抽象。

抽象 : 在软件工程和计算机科学中,抽象是一种管理计算机系统复杂性的技术。 通过建立一个人与系统进行交互的复杂程度,把更复杂的细节抑制在当前水平之下。简言之,抽象让我们专注于预定的目标而无须关心底层的系统概念。

闭包和高阶函数

什么是闭包?简言之,闭包就是一个内部函数。什么是内部函数?就是在另一个函数内部的函数。

闭包的强大之处在于它对作用域链(或作用域层级)的访问。从技术上讲,闭包有3个可访问的作用域。

(1) 在它自身声明之内声明的变量

(2) 对全局变量的访问

(3) 对外部函数变量的访问(关键点)

JavaScript是函数式编程语言吗?

函数式编程主张函数必须接受至少一个参数并返回一个值,但是JavaScript允许我们创建一个不接受参数并且实际上什么也不返回的函数。所以JavaScript不是一种纯函数语言,更像是一种多范式的语言,不过它非常适合函数式编程范式。

【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。




上一篇:ui设计师需要掌握哪些图标设计知识
下一篇:没有了

友情链接:
  • Android Q Beta 3推出全新系统黑暗主题,实时字幕等
  • WordPress 5.2 “Jaco”发布
  • Sailfish OS “Hossa”从旧eglibc 2.19升级,但仍依赖于GCC 4
  • GeForce GTX 1650支持向418.74更新移植到稳定的Linux驱动程序
  • Android Q的ANGLE在Vulkan上提供OpenGL ES
  • .NET 5 将于2020年问世
  • Mesa 19.1已被分支,Mesa 19.2正在开发中
  • FBI查获暗网索引和新闻网站Deep Dot Web
  • LibreOffice 6.1于5月29日到达生命周期,请升级到LibreOffice 6.
  • Canonical为微软Hyper-V提供优化的Ubuntu 19.04桌面镜像
  • Apple发布iOS 12.3,macOS 10.14.5,tvOS 12.3和watchOS 5.2.1的
  • KDE Plasma 5.15桌面寿命终结,KDE Plasma 5.16于6月11日发布 -
  • Red Hat Enterprise Linux 8.0(RHEL8)正式发布了
  • Ant Design 3.17.0 发布,企业级UI设计语言
  • 音乐播放器 Qmmp 1.3.2 发布,修复Wayland会话问题
  • Ubuntu 14.04(Trusty Tahr)达到生命终点,现在升级到Ubuntu 18
  • JupyterHub 1.0 发布,命名服务器与TLS加密支持
  • Linux Kernel 5.1 正式发布,大量新功能
  • Linux Mint 17达到了生命终结,用户需要升级到Linux Mint 18或19
  • RStudio 1.2发布,改进对Python chunks,R脚本等的测试和支持
  • Firefox 66.0.4 发布,解决由于证书过期而导致的插件损坏问题
  • 印度将于5月成立国防网络局
  • macOS版本的Microsoft Edge 浏览器下载地址泄露
  • 微软宣布推出“Windows Terminal”,受Linux风格启发终端
  • Btrfs在Linux 5.2内核中获得一些有用的修复/改进
  • Unigine 2.8 发布,更好的植被与异步数据流
  • Linux Kernel 5.1 应该会在今天发布,更快的zRAM
  • Linux版的Microsoft Edge浏览器可能在工作中
  • GNU Linux-Libre 5.1 内核正式发布,基于Linux kernel 5.1系列
  • 微软宣布推出Windows Subsystem for Linux 2(WSL 2)
  • Ubuntu Linux现在支持微软的第二代Windows Linux子系统(WSL 2 )
  • Visual Studio Code添加Java 12支持,Java代码操作和语言功能
  • 微软为Windows 10带来原生Linux内核,将成为WSL 2的一部分
  • Ubuntu 19.10代号为“Eoan Ermine”,将于10月17日发布
  • 2019年GitHub上最受欢迎的7种编程语言
  • Brackets 1.14 发布,LSP支持(Ubuntu下安装方法)
  • 适用于Linux的最佳Photoshop替代品 - GIMP,Krita,Darktable,d
  • Linux 5.2应该可以解决许多AMD Ryzen笔记本电脑触摸屏/触摸板无
  • 谈判失败:Oracle 杀死 Java EE
  • 寒武纪“思元270”曝光,AI性能直追Nvidia
  • DXVK 1.1.1 发布,解决召回的DXVK 1.1问题
  • 全球首款人工智能触觉芯片问世 它能带来什么惊喜呢?
  • 工信部批复同意成都建国家“芯火”双创基地
  • 7nm二代霄龙新品面世,AMD市场份额将超10%
  • 手机CPU“核战”结束了吗?
  • 大乐透走试图
  • 体彩排列3助赢软件
  • 世界杯盘口
  • 专业玩彩网
  • 金沙扑克
  • 电子游戏机
  • 宝来棋牌
  • 体彩竞彩