您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

JavaScript函数的6个基本术语

时间:2019-05-08 11:13:01  来源:  作者:

前言

可能你会很熟练,但名称不一定知道。

正文从这开始~~

 

译 | JavaScript函数的6个基本术语

 

 

让我们谈谈什么是:lambdas(匿名函数)、 first-class functions(头等函数)、higher-order functions(高阶函数)、unary functions(一元函数)、currying(柯里化 )和pure functions(纯函数)。

如果您不清楚命令式和声明式编程之间的区别,可以看我的文章: Imperative versus declarative code… what’s the difference?

什么是Lambdas(匿名)=> 箭头函数?

Lambdas (λ) 在 JAVAScript 作为arrow functions(箭头函数)被广为所知:

// this is your regular named function in JavaScriptfunction namedFunction (a, b) {
 return a + b;}// this is a lambda, i.e. an arrow functionconst lambda = (a, b) => a + b;

术语lambda是一个正式的数学逻辑系统,起源于lambda演算。Lambda演算是由图灵完成的,它代表了能够构建任何图灵机的通用计算模型。 Lambda expressions(匿名函数表达式) 是函数式编程的基石。如果它对你有所帮助,只需将它视为函数的新缩短语法就行。然而,在对象或类中使用它们时要注意this的指向。

什么是first-class functions(头等函数)?

First-class type 意味着,该类型可以用作变量的值。在JavaScript中一个字符串是头等类型,一个函数也是头等类型。所以函数可以接受其他函数作为参数,并返回函数作为返回值。

在绑定事件监听器时,函数作为first-class被使用:

const handler = () => console.log ('I am function');
document.addEventListener ('click', handler);

什么是higher-order functions(高阶函数)?

高阶函数是一个接受其他函数作为参数或将函数作为返回值返回的函数。 First-order function(一阶函数)是一个函数,它不接受其他函数作为参数,并且不返回函数作为其返回值。

const firstOrder = () => console.log ('First order strikes back!');const higherOrder = whoStrikesBack => whoStrikesBack ();
higherOrder (firstOrder);

什么是unary functions(一元函数)?

该术语涉及一个函数接受一些参数的元数。一元函数(i.e. monadic)是一个只接受一个参数的函数。

const unaryFunction = message => console.log (message);const binaryFunction = (color, message) =>
 console.log (`%c${message}`, `color:${color}`);const ternaryFunction = (fnc, color, message) =>
 fnc (`%c${message}`, `color:${color}`);

什么是currying(柯里化)?

Currying(柯里化)是一个带有多个参数的函数并将其转换为函数序列的过程,每个函数只有一个参数。

一个有n个参数的函数,可以使用柯里化将它变成一个一元函数。

const binaryFunction = (a, b) => a + b;const curryUnaryFunction = a => b => a + b;
curryUnaryFunction (1); // returns a function: b => 1 + b
curryUnaryFunction (1) (2); // returns the number 3

Currying(柯里化)以数学家 Haskell Curry的名字命名,不是吃的。

柯里化函数非常适合提高代码的可重用性和函数式结构。想了解更多,请参考: JavaScript ES6 curry functions with practical examples。它可能会让人习惯,但是我现在写的所有函数都归功于柯里化。

什么是pure functions(纯函数)?

纯函数是一种其返回值仅由其参数决定,没有任何副作用的函数。

这意味着如果你在整个应用程序中的不同的一百个地放调用一个纯函数相同的参数一百次,该函数始终返回相同的值。纯函数不会更改或读取外部状态。

let myArray = [];const impureAddNumber = number => myArray.push (number);const pureAddNumber = number => anArray =>
 anArray.concat ([number]);
console.log (impureAddNumber (2)); // returns 1
console.log (myArray); // returns [2]
console.log (pureAddNumber (3) (myArray)); // returns [2, 3]
console.log (myArray); // returns [2]
myArray = pureAddNumber (3) (myArray);
console.log (myArray); // returns [2, 3]

在数组中,Push函数就是不纯的,它会改变它所调用的数组,因此会产生副作用。 push的返回值是一个数字索引。

另外,Concat接受数组并将其与另一个数组连接,从而产生一个没有副作用的全新数组。然后返回两个数组串联后的新数组。

纯函数很重要,因为它们简化了单元测试(没有副作用,也不需要依赖注入),它们避免紧密耦合,并通过消除副作用,使应用程序更加简洁。

我专门撰写了一篇文章来讨论纯函数在编程中的最佳实践:JavaScript Pure Functions for OOP developers

结语

理解函数式编程并不能让你成为更好的开发者,它会让你成为一个更好的人。你可以通过lambda演算用啤酒来招待你的朋友,可以通过有趣的数学逻辑来纠正你的家人。

要在实践中使用所有这些术语,请阅读:8 steps to turn imperative JavaScript class to a functional declarative code

另外,要了解有关条件语句和条件表达式的更多信息,请阅读:How to replace switch and ternaries in functional JavaScript

关于本文

译者:@reahink

译文:https://zhuanlan.zhihu.com/p/61868946

作者:@Martin Novák

原文:https://medium.com/front-end-weekly/6-fundamental-terms-in-functional-javascript-e25d50d40b2c
 



Tags:JavaScript js   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
JavaScript常用基础算法
一、排序 冒泡排序//冒泡排序function bubbleSort(arr) { for(var i = 1, len = arr.length; i < len - 1; ++i) { for(var j = 0; j <= len - i; ++j) { if (arr[j] > arr[...【详细内容】
2019-05-17  Search: JavaScript  js  点击:(1286)  评论:(0)  加入收藏
JavaScript 引用类型
JavaScript 引用类型所谓引用类型,在ECMAScript中表示一种数据结构,其中有一些数据和方法,在其他语言中大多被称为类,但是在这里我们一般不这样称呼。即使ECMAScript是一门面...【详细内容】
2019-05-15  Search: JavaScript  js  点击:(1756)  评论:(0)  加入收藏
JavaScript函数的6个基本术语
前言可能你会很熟练,但名称不一定知道。正文从这开始~~ 让我们谈谈什么是:lambdas(匿名函数)、 first-class functions(头等函数)、higher-order functions(高阶函数)、unary functi...【详细内容】
2019-05-08  Search: JavaScript  js  点击:(1846)  评论:(0)  加入收藏
灵活运用JavaScript开发技巧
前言何为技巧,意指表现在文学、工艺、体育等方面的巧妙技能。代码作为一门现代高级工艺,推动着人类科学技术的发展,同时犹如文字一样承托着人类文化的进步。每写好一篇文章,都...【详细内容】
2019-05-08  Search: JavaScript  js  点击:(2386)  评论:(0)  加入收藏
JavaScript 中的一些小技巧
这篇文章主要记录一下平时自己实践得到的, 博客中学习的以及在一些项目源码中看到的 javascript 技巧。有些东西可以说是奇淫技巧,有些可能是 ES6+ 中一些比较具有实用性的...【详细内容】
2019-05-05  Search: JavaScript  js  点击:(1525)  评论:(0)  加入收藏
▌简易百科推荐
JavaScript的异步编程常见模式
在JavaScript中,异步编程是一种处理长时间运行操作(如网络请求或I/O操作)的常见方式。它允许程序在等待这些操作完成时继续执行其他任务,从而提高应用程序的响应性和性能。JavaS...【详细内容】
2024-04-12  靳国梁    Tags:JavaScript   点击:(9)  评论:(0)  加入收藏
17 个你需要知道的 JavaScript 优化技巧
你可能一直在使用JavaScript搞开发,但很多时候你可能对它提供的最新功能并不感冒,尽管这些功能在无需编写额外代码的情况下就可以解决你的问题。作为前端开发人员,我们必须了解...【详细内容】
2024-04-03  前端新世界  微信公众号  Tags:JavaScript   点击:(7)  评论:(0)  加入收藏
你不可不知的 15 个 JavaScript 小贴士
在掌握如何编写JavaScript代码之后,那么就进阶到实践&mdash;&mdash;如何真正地解决问题。我们需要更改JS代码使其更简单、更易于阅读,因为这样的程序更易于团队成员之间紧密协...【详细内容】
2024-03-21  前端新世界  微信公众号  Tags:JavaScript   点击:(29)  评论:(0)  加入收藏
又出新JS运行时了!JS运行时大盘点
Node.js是基于Google V8引擎的JavaScript运行时,以非阻塞I/O和事件驱动架构为特色,实现全栈开发。它跨平台且拥有丰富的生态系统,但也面临安全性、TypeScript支持和性能等挑战...【详细内容】
2024-03-21  前端充电宝  微信公众号  Tags:JS   点击:(29)  评论:(0)  加入收藏
构建一个通用灵活的JavaScript插件系统?看完你也会!
在软件开发中,插件系统为应用程序提供了巨大的灵活性和可扩展性。它们允许开发者在不修改核心代码的情况下扩展和定制应用程序的功能。本文将详细介绍如何构建一个灵活的Java...【详细内容】
2024-03-20  前端历险记  微信公众号  Tags:JavaScript   点击:(23)  评论:(0)  加入收藏
对JavaScript代码压缩有什么好处?
对JavaScript代码进行压缩主要带来以下好处: 减小文件大小:通过移除代码中的空白符、换行符、注释,以及缩短变量名等方式,可以显著减小JavaScript文件的大小。这有助于减少网页...【详细内容】
2024-03-13  WangLiwen    Tags:JavaScript   点击:(8)  评论:(0)  加入收藏
跨端轻量JavaScript引擎的实现与探索
一、JavaScript 1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA 39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史: 2.JavaScript...【详细内容】
2024-03-12  京东云开发者    Tags:JavaScript   点击:(8)  评论:(0)  加入收藏
面向AI工程的五大JavaScript工具
令许多人惊讶的是,一向在Web开发领域中大放异彩的JavaScript在开发使用大语言模型(LLM)的应用程序方面同样大有价值。我们在本文中将介绍面向AI工程的五大工具,并为希望将LLM...【详细内容】
2024-02-06    51CTO  Tags:JavaScript   点击:(58)  评论:(0)  加入收藏
JS小知识,使用这6个小技巧,避免过多的使用 if 语句
最近在重构我的代码时,我注意到早期的代码使用了太多的 if 语句,达到了我以前从未见过的程度。这就是为什么我认为分享这些可以帮助我们避免使用过多 if 语句的简单技巧很重要...【详细内容】
2024-01-30  前端达人  今日头条  Tags:JS   点击:(62)  评论:(0)  加入收藏
18个JavaScript技巧:编写简洁高效的代码
本文翻译自 18 JavaScript Tips : You Should Know for Clean and Efficient Code,作者:Shefali, 略有删改。在这篇文章中,我将分享18个JavaScript技巧,以及一些你应该知道的示例...【详细内容】
2024-01-30  南城大前端  微信公众号  Tags:JavaScript   点击:(79)  评论:(0)  加入收藏
站内最新
站内热门
站内头条