Function Programming - First Class(一等公民function)
引用外界一等公民的定义:“在JavaScript世界中函数却是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值、传参、返回,这样的函数也称之为第一级函数(First-class Function)”。
那么,现在我要介绍的可是很厉害的哟~
(小试牛刀)
首先我们看一个栗子:
var getSum = function(number) { return 8 + number; }
var applySum = function(number) { return getSum(number); }
怎么样?是不是特别愚蠢,applySum只是执行并返回了跟getSum一样的值。在js中,函数是可被调用的(callable):
getSum(2); //10;
getSum //function(number){ return 8 + number; }
只要传的参数一样,applySum跟getSum就是在做一模一樣的事情,所以完全可以用一下代码来声明applySum:
var applySum = getSum;
(厨师进阶)
再来一道菜:
var getDish = function(cookDish) {
return sayHungry(function(index) {
return cookDish(index);
});
}
}
等价于:
var getDish = sayHungry;
来来,分析一波:
sayHungry(function(index) {
return cookDish(index);
});
等价与sayHungry(cookDish);
原来的getDish可变为:
var getDish = function(cookDish) {
return sayHungry(cookDish);
};
而,
function(cookDish) {
return sayHungry(cookDish);
}
等价于:
sayHungry;
所以,
getDish = sayHungry;
got it? (厨师反思)
为何钟爱一等公民function? 还是举栗子:
get('/api/apple', function(response)) {
return renderGet(response);
})
这种方式的弊端在于,假使我的get api,需要回调函数有两个参数,那么我必须得再加一个参数,如下:
get('/api/apple', function(response, error) {
return renderGet(response, error);
})
写成first class的function,要方便的多:
get('/api/apple', renderGet)
好啦,这就是我今天要介绍的函数式编程第一曲,一等公民,要善于利用一等公民的权利,用更简单的方式做哦~
Function Programming - First Class(一等公民function)的更多相关文章
- Function Programming - 纯函数(Pure Function)
纯函数的定义,非常重要!! Pure function 意指相同的输入,永远会得到相同的输出,而且没有任何显著的副作用. 老样子,我们还是从最简单的栗子开始: var minimum = 21; va ...
- Function Programming - 柯里化(curry)
看到一篇非常不错的文章,这里分享给大家:http://www.jianshu.com/p/fa3568087881. 首先,柯里化的定义:你可以只透过部分的参数呼叫一个function,它会回传一个f ...
- JavaScript深入浅出第2课:函数是一等公民是什么意思呢?
摘要: 听起来很炫酷的一等公民是啥? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函 ...
- javascript世界一等公民—函数
简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...
- JS中的一等公民:函数
在JavaScript中,函数可以 作为值赋给一个变量 作为参数传递给另一个函数 作为另一个函数的返回值 所以我们说JavaScript的函数是“一等公民”. 赋值: var foo = functi ...
- JavaScript世界的一等公民—— 函数
简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...
- JavaScript世界的一等公民 - 函数
简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...
- javascript语言中的一等公民-函数
简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...
- # Functions are First-Class Citizens in Python 一等公民
# Functions are First-Class Citizens in Python 一等公民https://cn.bing.com/search?form=MOZSBR&pc=MOZ ...
随机推荐
- win10 + python3.6 + VSCode + tensorflow-gpu + keras + cuda8 + cuDN6N环境配置
写在前面的话: 再弄这个之前,我对python也好,tensorflow也好几乎是0认知的,所以配置这个环境的时候,走了不少弯路,整整耗费了一个星期的时间才搭配完整这个环境,简直了...然而最气的是, ...
- Nginx防盗链的3种方法
一:一般的防盗链如下: location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jzxue.com jzxue.c ...
- kettle系列一之eclipse开发
1.引言 最近公司开始一个etl项目,底层结合开源的kettle进行开发.那么学习kettle势在必行,kettle的使用在这里就不用介绍了,网上有很多的资料.例如:kettle中文社区,我们在这里主 ...
- Android实现购物车功能
如图: 主要代码如下: actvity中的代码: publicclassShoppingCartActivity extendsBaseActivity { private List< ...
- LeetCode 190. Reverse Bits (反转位)
Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...
- Call From master/192.168.128.135 to master:8485 failed on connection exception: java.net.ConnectException: Connection refused
hadoop集群搭建了ha,初次启动正常,最近几天启动时偶尔发现,namenode1节点启动后一段时间(大约10几秒-半分钟左右),namenode1上namenode进程停掉,查看日志: -- :: ...
- python 使用标准库根据进程名获取进程的pid
有时候需要获取进程的pid,但又无法使用第三方库的时候. 方法适用linux平台. 方法1 使用subprocess 的check_output函数执行pidof命令 from subprocess ...
- Ipad,IPhone(矩阵求递推项+欧拉定理)
Ipad,IPhone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HashMap面试题:90%的人回答不上来
在java面试中集合类似乎已经是绕不开的话题,对于一个中高级java程序员来说如果对集合类的内部原理不了解,基本上面试都会被pass掉.下面从面试官的角度来聊聊一个候选者应该对HashMap了解到什么 ...
- Android中常用的URI
使用URI需要注意:当应用需要和手机里的文件或者程序互动时需要为该应用增加权限.在AndroidManifiest.xml文件中的根元素中增加如下配置 例如: 1.当应用需要读取.添加联系人时: 授予 ...