day17:First-class function

在了解 first-class 一等公民函式前,我们先来看看 MDN 对於 first class functions 的定义是什麽

A programming language is said to have First-class functions when functions in that language are treated like any other variable. For example, in such a language, a function can be passed as an argument to other functions, can be returned by another function, and can be assigned as a value to a variable.

以上这段话简单来说就是,一个程序如果要具有 first-class function ,他需要具有 function 可以被当成变数传递,且 function 可以被当成另外一个 function 的参数。 function 可以被其他 function 当作回传值和可以当成一个变数的值。

看完了以上这段话是不是有大概了解 first-class function ,如果没有也没关系,

以下我们有些范例可以看看。

function 可以当成变数

譬如我们有个 function 他回回传 I have a + 宠物名

const havePet = (pet)=>{
	console.log(` I have  a ${pet}`);
}

const myPet = havePet;

myPet('cat') // I have  a  cat

这时候我们可以看到 function 其实是可以被当成一个变数传递的

function 可以 return function

如果这时候我们想把主词 I 换成 he 或 you,那就可以用 function 可以 return function 的特性

const someoneHavePet =(someone)=>{
	return (pet)=>{
		console.log(` ${someone} have  a ${pet}`);
	}
}

const you = someoneHavePet('you');
const youHaveDog = you('dog');

function 可以 当作参数

常见用於处理 api 的状态或是 callback function

const handleData = (user,errorHandle)=>{
	if(user > 5){
		return user;
	}else{
		errorHandle('you got user less 5')
	}
}

handleData(4,(error)=>{console.log(error)})
// 'you got user less 5'

function 可以当成变数的值

例如你有一个含有加减乘除的 object,里面有各种计算的方法

const caculateMethods = {
	add:(x,y)=>x+y;
	subtract:(x,y) => x - y;
	multiply:(x,y) => x * y;
	division:(x,y)=>x / y;
}

caculateMethods.multiply(2.2); // 4

以上就是 first-class function 的特性,明天我们再来谈谈其他的吧!

https://medium.com/hackernoon/javascript-and-functional-programming-pt-2-first-class-functions-4437a1aec217

https://jigsawye.gitbooks.io/mostly-adequate-guide/content/ch2.html


<<:  # Day 23 Heterogeneous Memory Management (HMM) (三)

>>:  【程序】洞察专案管理方法 转生成恶役菜鸟工程师避免 Bad End 的 30 件事 - 19

Day19 Vue基本教学(一)

Vue.js介绍 是一个用於建立使用者介面的开源JavaScript框架,也是一个建立单页应用的We...

[DAY 16]用bot打出色色柴犬counter牌

最近很夯的色色柴犬大家应该有听过吧 没错就是这一系列牌组 然後某一天晚上不知道我发什麽神经突然有个念...

[Day 8] Vue的模板语法(Template Syntax)---插值

Vue的模板语法分成两种---插值和指令,而今天我们要来讲的是插值的部分,插值就是Mustache语...

Day-9: Migration 系虾米哇贵?

Migration建立资料表系虾密? Rails使用了Migration资料库迁移机制来定义资料库结...

【第十六天 - Flutter Google、Apple、FB Sign in 流程讲解】

前言 今日的程序码 => GITHUB google_sign_in plugin文件 sig...