javascript函数式编程基础(代码片段)

wanluN1 wanluN1     2023-01-15     391

关键词:

javascript函数式编程基础

函数调用 引用 做返回值

/*javascript函数式编程基础*/
function sayHello()
    return "hello world";

let result=sayHello();//函数调用
let fn=sayHello;//函数引用
console.log(fn());//hello world

//函数做返回值
function ee()
    return function()
        return "hello world";
    

console.log(ee()());//hello world

高阶函数,传入参数为函数


//高阶函数,传入参数为函数
let nnjfd=[1,2,3];
nnjfd=nnjfd.map(number=>number*2);
console.log(nnjfd);//[2,4,6]

箭头函数与函数功能流水线化

//箭头函数,与流水线化
input="JS";
trim=str=>str.trim();
wrapInDiv=str=>`<div>$str</div>`;
toLowerCase=str=>str.toLowerCase();
result=wrapInDiv(toLowerCase(trim(input)));
console.log(result);//<div>js</div>
//当wrapInDiv(toLowerCase(trim(input)));功能越多,代码越来越多
//比较乱,怎么解决看起来好一些呢
let fp=require("lodash/fp");
transform=fp.compose(wrapInDiv,toLowerCase,trim);//何为一个函数,从右到左执行
//每个函数的返回值会成为下个函数的参数
console.log(transform(input));//<div>js</div>
transform=fp.pipe(trim,toLowerCase,wrapInDiv);//何为一个函数,从左到右执行
console.log(transform(input));//<div>js</div>

柯里化


//柯里化
trim=str=>str.trim();
wrapInDiv=type=>str=>`<$type>$str<$type>`;
/*
function(a)
    return function(b)
        return a+b;
    

*/
toLowerCase=str=>str.toLowerCase();
transform=fp.pipe(trim,toLowerCase,wrapInDiv("div"));
console.log(transform(input));//<div>js<div>

纯函数

//纯函数
//纯函数中不能使用随机值
//No random values
//no current date/time
//no global state
function isEligible(age)//it's not pure function
    return age>minAge;

function isEligi(age,minAge)//it's pure function
    return age>minAge;

//纯函数优点
/*Self-documenting  Easily testable  Concurrency  Cacheable*/

更新对象、浅拷贝问题

//更新对象
const person=name:'John',adress:city:'san francisco';
person.name='Mary';
//Error  person=
tempObject=Object.assign(,person,name:'Bob',age:11);//将person对象内的内容复制到 再返回
console.log(tempObject);// name: 'Bob', adress:  city: 'san francisco' , age: 11 
//拆分操作符
tempObject=...person,a:'a',b:'b';
console.log(tempObject);// name: 'Mary', adress:  city: 'san francisco' , a: 'a', b: 'b' 
tempObject.adress.city='ppp';
console.log(person);// name: 'Mary', adress:  city: 'ppp'  
//上面对象的拷贝都只是一种浅拷贝,拆分操作符与Object.assign都是
//如何深拷贝,手动使用...将adress拆分,重写city
tempObject=...person,adress:...person.adress,city:'p';
tempObject.adress.city='ccc';
console.log(tempObject);// name: 'Mary', adress:  city: 'ccc'  
console.log(person);// name: 'Mary', adress:  city: 'ppp'  ;
//或者使用深拷贝库来解决问题

更新数组

//更新数组
numbers=[1,2,3];
index=numbers.indexOf(2);
//Adding
added=[
    ...numbers.slice(0,index),
    4,
    ...numbers.slice(index)
];
console.log(added);//[ 1, 4, 2, 3 ]
//Removing
numbers=numbers.filter(n=>
    return n!==4;
);
console.log(numbers);//[1,2,3]
//Updating
updated=numbers.map(v=>return v===2?20:v);
console.log(updated);//[ 1, 20, 3 ]

不可变对象 immutable与immer库


//不可变对象immutable库
const  Map  = require('immutable');
let book=Map(title:"Harry Potter");
function publish(book)
    return book.set("isPublished",true);

booked=publish(book);
console.log(book.toJS());// title: 'Harry Potter' 
console.log(booked.toJS());// title: 'Harry Potter', isPublished: true 

book=title:"Harry Potter";
const produce=require("immer");
function publish1(book)
    return produce(book,draftBook=>
        draftBook.isPublished=true;
    );

temp=publish1(book);
console.log(book);// title: 'Harry Potter' 
console.log(temp);// title: 'Harry Potter', isPublished: true 
temp.title='OOPOP';
console.log(book);// title: 'Harry Potter' 
console.log(temp);// title: 'Harry Potter', isPublished: true 

javascript函数式编程(代码片段)

JavaScript函数式编程(一) JavaScript函数式编程(二)在第二篇文章里,我们介绍了 Maybe、Either、IO 等几种常见的Functor,或许很多看完第二篇文章的人都会有疑惑:『这些东西有什么卵用?』事实上,如果只是为了学... 查看详情

javascriptes6函数式编程:柯里化偏应用组合管道(代码片段)

上一篇介绍了闭包和高阶函数,这是函数式编程的基础核心。这一篇来看看高阶函数的实战场景。首先强调两点:注意闭包的生成位置,清楚作用域链,知道闭包生成后缓存了哪些变量高阶函数思想:以变量作用域作为根基,以... 查看详情

javascript基础知识语法(代码片段)

什么是JavaScript?JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于... 查看详情

python基础--函数式编程(代码片段)

#面向过程#函数式编程:函数式=编程语言定义的函数+数学意义上的函数#面向对象#高阶函数:1.函数接受的参数是一个函数名2.返回值中包含函数#deffoo(n):#n=bar#print(n)##defbar(name):#print(‘mynameis%s‘%name)###foo(bar)#把函数当做参数传给另... 查看详情

深入理解函数式编程(下)(代码片段)

...技术、重要特性和实践法则。在内容层面,主要使用JavaScript语言来描述函数式编程的特性,并以演算规则、语言特性、范式特性、副作用处理等方面作为切入点,通过大量演示示例来讲解这种编程范式。 查看详情

深入理解函数式编程(下)(代码片段)

...技术、重要特性和实践法则。在内容层面,主要使用JavaScript语言来描述函数式编程的特性,并以演算规则、语言特性、范式特性、副作用处理等方面作为切入点,通过 查看详情

scala学习(函数式编程面向对象编程)(代码片段)

文章目录函数式编程基础函数编程函数定义函数参数函数至简原则高阶函数编程面向对象编程基础面向对象编程高阶面向对象编程函数式编程基础函数编程函数定义packagelearn03objectdemo01defmain(args:Array[String]):Unit=//无参、无返回... 查看详情

scala学习(函数式编程面向对象编程)(代码片段)

文章目录函数式编程基础函数编程函数定义函数参数函数至简原则高阶函数编程面向对象编程基础面向对象编程高阶面向对象编程函数式编程基础函数编程函数定义packagelearn03objectdemo01defmain(args:Array[String]):Unit=//无参、无返回... 查看详情

函数式编程(代码片段)

《Python从小白到大牛》第10章函数式编程定义函数函数参数使用关键字参数调用函数参数默认值可变参数函数返回值无返回值函数多返回值函数函数变量作用域生成器嵌套函数函数式编程基础函数类型上述代码第①行重构了calcula... 查看详情

05-2函数基础(代码片段)

函数在未未深入学习之前,我们写的代码都是函数式编程。之后,我们会一直使用面向对象编程。1函数式编程和面向对象编程的区别函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可面向对象:对函... 查看详情

函数式编程(模块基础)(代码片段)

...越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)... 查看详情

java8函数式编程——基础篇(代码片段)

函数式编程一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ演算(lambdacalculus)为该语言最重要的基础。特性函数是“第一等公民”函数与其他数据类型一样,... 查看详情

函数式编程基础(代码片段)

前言何谓函数式编程编程语言主要有三种类型:1.命令式编程:专注于“如何去做”,所有的事情都按照你的命令去做;2.函数式编程:把运算的过程尽量表现成一系列的嵌套函数调用,相比命令式编程关... 查看详情

函数式编程基础(代码片段)

前言何谓函数式编程编程语言主要有三种类型:1.命令式编程:专注于“如何去做”,所有的事情都按照你的命令去做;2.函数式编程:把运算的过程尽量表现成一系列的嵌套函数调用,相比命令式编程关... 查看详情

scala函数式编程函数式的数据结构下(代码片段)

前情提要Scala函数式编程指南(一)函数式思想介绍scala函数式编程(二)scala基础语法介绍Scala函数式编程(三)scala集合和函数Scala函数式编程(四)函数式的数据结构上1.List代码解析今天介绍的内容,主要是对上一篇介绍的sca... 查看详情

从函数式编程到promise(代码片段)

...按:近年来,函数式语言的特性都被其它语言学过去了。JavaScript异步编程中大显神通的Promise,其实源自于函数式编程的Monad!原文:FunctionalComputationalThinking?—?Whatisamonad?译者:Fundebug为了保证可读性,本文采用意译而非直译。另外,... 查看详情

web前端开发工程师知识体系_3_javascript基础(代码片段)

        JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程... 查看详情

《javascript函数式编程思想》

自序伴随着Web技术的普及,JavaScript已成为应用最广泛的编程语言之一。由于其在Web前端编程中的统治地位、语言本身的表现力、灵活性、开源的本质和ECMAScript标准近年来的快速发展,JavaScript向各个领域渗透的势头仍然... 查看详情