博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[翻译] JavaScript函数的6个基本术语
阅读量:5737 次
发布时间:2019-06-18

本文共 2685 字,大约阅读时间需要 8 分钟。

作者:Martin Novák

让我们谈谈什么是:(匿名函数)、 (头等函数)、(高阶函数)、(一元函数)、(柯里化 )和(纯函数)。

如果您不清楚命令式和声明式编程之间的区别,可以看我的文章:

什么是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 + bcurryUnaryFunction (1) (2); // returns the number 3复制代码

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

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

什么是pure functions(纯函数)?

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

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

let myArray = [];const impureAddNumber = number => myArray.push (number);const pureAddNumber = number => anArray =>  anArray.concat ([number]);  console.log (impureAddNumber (2)); // returns 1console.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接受数组并将其与另一个数组连接,从而产生一个没有副作用的全新数组。然后返回两个数组串联后的新数组。

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

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

结语

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

要在实践中使用所有这些术语,请阅读:

另外,要了解有关条件语句和条件表达式的更多信息,请阅读:

转载于:https://juejin.im/post/5cac65b35188251b162f266e

你可能感兴趣的文章
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
代码分析系列 内存执行过程
查看>>
iOS开发-邮件发送
查看>>
/etc/resolv.conf文件详解
查看>>
【转】VC的MFC中重绘函数的使用总结(整理)
查看>>
JQuery日记_5.13 Sizzle选择器(六)选择器的效率
查看>>
oracle查看经常使用的系统信息
查看>>