把一个函数作为另一个函数的参数进行传递,这种函数式编程的特点在js中有很多体现。下面是我用koa写服务器的一小段程序,可以看见函数作为参数传递在js中比比皆是。
const Koa = require('koa');
const app = new Koa();
//函数作为ues方法的参数传递
app.use(async (ctx,next) => {
console.log(ctx.request.method,ctx.request.url)
});
//函数作为on方法的参数传递
app.on('error',error =>{
console.log('server error',error)
});
//函数作为listen方法参数传递
app.listen('3030',() =>{
console.log('server is starting-------------------')
});
module.exports = app;
函数可以看做机器或者黑箱,输入一些东西,在黑箱中进行一系列操作,输出一些东西。同一输入对应着唯一输出。
计算的本质为,一切皆函数(阿隆左 . 丘奇 lambda演算)。函数可以作为另外一个函数的输入或输出,一系列函数最终形成一个函数链,这个过程就是计算的本质。
高阶函数,"阶"就是抽象的层次。
一次抽象 对任意数组都能执行元素加一的操作
function map(arr){
var newArr = []
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]+=1)
}
return newArr
}
//调用
map([1,2,3])
二次抽象 对任意数组的元素可以执行任意的操作
function map(arr,fn){
var newArr = []
for(var i=0;i<arr.length;i++){
newArr.push(fn(arr[i]))
}
return newArr
}
//调用
map([3,4,5],function(n){
n = n * 2
})
函数的通用性越高,调用起来越麻烦。好比机器的功能越复杂,使用起来的配置就越麻烦一样。
每个函数只做一件简单的事情。
局部变量应该定义在靠近使用它的地方,提高可读性。
点击查看上一篇我眼中的js编程(3)
我眼中的js编程系列是我个人的学习总结,如有错误,烦请包涵、不吝赐教,O(∩_∩)O谢谢
网友评论