在了解 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 他回回传 I have a + 宠物名
const havePet = (pet)=>{
console.log(` I have a ${pet}`);
}
const myPet = havePet;
myPet('cat') // I have a cat
这时候我们可以看到 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');
常见用於处理 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'
例如你有一个含有加减乘除的 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
Vue.js介绍 是一个用於建立使用者介面的开源JavaScript框架,也是一个建立单页应用的We...
最近很夯的色色柴犬大家应该有听过吧 没错就是这一系列牌组 然後某一天晚上不知道我发什麽神经突然有个念...
Vue的模板语法分成两种---插值和指令,而今天我们要来讲的是插值的部分,插值就是Mustache语...
Migration建立资料表系虾密? Rails使用了Migration资料库迁移机制来定义资料库结...
前言 今日的程序码 => GITHUB google_sign_in plugin文件 sig...