过去编程方式主要是以命令式编程为主,什么意思呢?简单说电脑的思维方式和我们人类的思考方式是不一样的。我们人类的大脑擅长的是分析问题,提出一个解决问题的方案,电脑则是生硬的执行指令,命令式编程就像是给电脑下达命令,让电脑去执行一样,现在主要的编程语言(比如:Java,C,C++等)都是由命令式编程构建起来的。 而函数式编程就不一样了,这是模仿我们人类的思维方式发明出来的。例如:操作某个数组的每一个元素然后返回一个新数组,如果是计算机的思考方式,会这样想:创建一个新数组=>遍历旧数组=>给新数组赋值。如果是人类的思考方式,会这样想:创建一个数组方法,作用在旧数组上,返回新数组。这样此方法可以被重复利用。而这就是函数式编程了。
- 高阶函数可以接受函数作为参数,或者返回一个函数结果或者两者同时。
- 闭包就是一个函数的作用域,这个作用域通过指向改函数的引用保持存活
- 科里化(参数缓存,延迟执行)
- 组合函数 马上计算
- 声明式与命令式
- reduce
自己实现数组中的map
Array.prototype.map=function(arr,func){
var results = [];
for(var i = 0,len = a.length;i<leni++){
if(i in a){
results[i] = f.call(null,a[i],i,a);
}
return results;
}
}
自己实现数组中的reduce
Array.prototype.reduce = function(a,f,initial){
var i = 0,len = a.length,accumulator;
//以特定的初始值开始,否则第一个取值自a
if(arguments.length > 2){
accumulator = initial;
}else{//找到数组中第一个已定义的索引
if(len = 0) throw TypeError();
while(i<len){
if(i in a){
accumulator = a[i++];
break;
}else i++;
}
if(i == len) throw TypeError();
}
while(i < len){
if(i in a){
accumulator = f.call(undefined,accumulator,a[i],i,a);
i++;
}
return accumulator;
}
}