概念函数式编程是一种编程范式,在这种范式中,我们试图以一种纯数学的函数式风格来绑定一切。它是一种声明式编程风格。它的主要焦点是“解决什么”,而命令式的主要焦点是“如何解决”。它使用表达式而不是语句。计算表达式以产生值,而执行语句以分配变量。函数式编程基于Lambda演算。此外,Lambda演算中的函数可以接受函数作为输入参数和输出返回值。特征纯函数这些函数有两个主要属性。首先,无论其他情况如何,它们总是对相同的参数产生相同的输出。其次,它们没有副作用,即它们不修改任何参数或局部/全局变量或输入/输出流。后面的属性称为不变性。纯函数的唯一结果是它返回的值。它们是确定性的。让arr=[1,2,3,4,5];到。片(0,3);//[1,2,3]arr.片(0,3);//[1,2,3]arr.splice(0,3);//[1,2,3]arr.splice(0,3);//[4,5]//slice会改变参数,splice也会改变,所有的slice都是纯函数,而splice不是递归的函数式语言中没有“for”或“while”循环。函数式语言中的迭代是通过递归实现的。递归函数反复调用自身,直到达到基本情况。引用透明性引用透明性是指函数的运行不依赖于外部变量或“状态”,而只依赖于输入参数。任何时候只要参数相同,引用函数得到的返回值就永远相同。函数是一流的,可以是高阶的。一等函数被视为一等变量。第一类变量可以作为参数传递给函数、从函数返回或存储在数据结构中。高阶函数是将其他函数作为参数的函数,它们也可以返回函数。变量是不可变的在函数式编程中,我们不能在变量初始化后修改它。我们可以创建新变量-但我们不能修改现有变量,这确实有助于在整个程序运行时维护状态。一旦我们创建了一个变量并设置了它的值,我们就可以绝对确定变量的值永远不会改变。高阶函数在数学和计算机科学中,高阶函数是至少满足以下条件之一的函数:接受一个或多个函数作为输入并输出一个函数我们说闭包也是一个高阶函数函数,因为闭包输出一个函数,满足高阶函数的第二个条件。functionsquare(x){returnx*x;}//add接受一个函数作为输入,它是一个高阶函数functionadd(x,y,fn){returnfn(x)+fn(y);}添加(10,-20,方形);//500functionsCurrying(柯里化)是把接受多个参数的函数变成接受单个参数的函数(原函数的第一个参数),并返回接受剩下的一个新的带参数函数的技巧并返回结果。函数添加(a,b,c){返回a+b+c;}letfoo=function(a){returnfunction(b){returnfunction(c){returna+b+c;}}}foo(1)(2)(3);//6//抽象函数foo(fn,...args1){returnfunction(...args2){returnfunction(...arg3){returnfn(..args1,...args2,...参数3);}}}foo(add,1)(2)(3);//自动字距调整函数foo(fn,...args){if(args.length>=fn.length){returnfn(...args);}returnfunction(...args2){returnfoo(fn,...args,...args2);}}偏函数固定一个函数一个或多个参数,返回一个新的函数接收剩下的参数,返回的新函数是偏函数。functionadd(a,b,c){returna+b+c;}functionnewAdd=add.bind(null,1);newAdd(2,3);//与以更优雅的方式解耦实现纯函数相关的6个访谈letcompose=(f,g)=>(x=>f(g(x)));letadd1=x=>x+1;letmul5=x=>x*5;撰写(mul5,add1)(2);//15//面试题-数组长度未知时,获取最后一项letfirst=arr=>arr[0];letreverse=arr=>arr.reverse();letlast=compose(first,反转);最后([1,2,3,4,5]);//5个参考文档:FunctionalProgrammingParadigm函数式编程
