在这篇文章中,我们将讨论与函数式编程相关的不同编程范式,以及如何在javascript中实现它。
函数式编程
它是处理计算和数学应用的编程类型之一。Haskell、Clojure、Python、Erlang和Scala是完整的函数式编程语言。Javascript不是严格意义上的函数式编程语言,但它支持其中的一些技术。
它是一个函数作为其他函数的参数,对数组或集合中的每个元素执行的又一种模式。为了实现这一点,Javascript引入了第一类对象/公民。
Javascript已经用数组和字符串方法实现了这种模式,比如forEach方法、过滤器、every()、Map()方法。这些方法对每个元素进行迭代,并在每个元素上应用函数。
我们将在接下来的章节中看到一些例子
函数也是javascript中的对象
函数也包含属性
让我们看看简单的函数创建
console.log(testmethod); // returns function code
console.log(testmethod.name); // returns testmethod
function testmethod() {
console.log('Howdie');
}
运行aboe代码后,它只是返回函数。让我们看看
函数也有属性,testmethod.name打印出函数的名称。
第一类函数
什么是第一类函数?
在任何编程中,如果函数可以和变量一样被处理,那么第一类函数就被称为函数。
这意味着函数被保存为变量,作为参数传递给函数,并从函数中返回。
这也被称为Javascript的第一等公民或第一等对象。
我们将看到详细的教程,使用函数等同于使用变量,例子如下
- 函数可以被分配给变量/常量/对象/数组
- 函数可以作为参数传递给一个函数
- 函数可以从一个函数中返回
函数保存到变量/常量/对象/数组中
这里我们把anonyms函数分配给了变量。我们用这个变量调用函数。命名的函数也可以这样调用。在javascript中,函数和变量/值的处理是一样的
函数分配给变量
函数也可以分配给变量
let functionVariable = function method() {}
赋值给常数
该函数也可以赋值给常数。
let functionVariable = function method() {}
const function1 = function() {
console.log("function printed");
}
function1();
函数赋值给对象
这是一个将函数像变量一样赋值或存储在对象中的例子。
let obj = { method : function(){} }
函数保存到数组
这是一个将函数像元素一样保存在数组中的语法。
myarray.push(function method() {})
作为一个函数参数传递给其他函数
这个例子,将一个函数作为参数传递给函数 这里函数2作为参数传递给显示函数 function2是一个回调函数
function function2() {
return "function2 ";
}
function display(helloMessage, name) {
console.log(function2() + name);
}
display(function2);
函数返回函数像一个变量值
function mainfunction() {
return function(){
return "return function as value"}
}
从以上的函数例子中,我们可以说javascript中的函数被当作一个变量,我们可以很容易地说是第一等公民。
高阶函数是将一个函数作为参数,并将该函数作为参数返回的函数。
在函数式编程中,数据是不可变的
在函数式编程中,状态或数据是不可改变的,这意味着不能更新它。
对于一个变量来说。
如果你想改变一个变量中的数据,你需要创建一个新的变量。为了实现这一点,在声明中使用const关键字。
对于数组
你需要创建一个新的数组并连接现有的数组,你可以使用Object.assign()方法或spread operator来实现这个目的。
对于对象
对象中的数据永远不会被改变,所以你需要使用Object.assign来克隆对象并更新它。
在函数式编程中,数据是不会被改变的,你需要创建一个数据的副本来改变它。
函数提供了数据的拷贝,并且支持javascript本地的map和reduce方法来返回现有数据的拷贝/创建。