把一個函數(shù)作為另一個函數(shù)的參數(shù)進(jìn)行傳遞,這種函數(shù)式編程的特點在js中有很多體現(xiàn)疙教。下面是我用koa寫服務(wù)器的一小段程序候引,可以看見函數(shù)作為參數(shù)傳遞在js中比比皆是邓尤。
const Koa = require('koa');
const app = new Koa();
//函數(shù)作為ues方法的參數(shù)傳遞
app.use(async (ctx,next) => {
console.log(ctx.request.method,ctx.request.url)
});
//函數(shù)作為on方法的參數(shù)傳遞
app.on('error',error =>{
console.log('server error',error)
});
//函數(shù)作為listen方法參數(shù)傳遞
app.listen('3030',() =>{
console.log('server is starting-------------------')
});
module.exports = app;
函數(shù)可以看做機器或者黑箱,輸入一些東西剩檀,在黑箱中進(jìn)行一系列操作憋沿,輸出一些東西。同一輸入對應(yīng)著唯一輸出沪猴。
計算的本質(zhì)為辐啄,一切皆函數(shù)(阿隆左 . 丘奇 lambda演算)。函數(shù)可以作為另外一個函數(shù)的輸入或輸出运嗜,一系列函數(shù)最終形成一個函數(shù)鏈壶辜,這個過程就是計算的本質(zhì)。
高階函數(shù)洗出,"階"就是抽象的層次士复。
一次抽象 對任意數(shù)組都能執(zhí)行元素加一的操作
function map(arr){
var newArr = []
for(var i=0;i<arr.length;i++){
newArr.push(arr[i]+=1)
}
return newArr
}
//調(diào)用
map([1,2,3])
二次抽象 對任意數(shù)組的元素可以執(zhí)行任意的操作
function map(arr,fn){
var newArr = []
for(var i=0;i<arr.length;i++){
newArr.push(fn(arr[i]))
}
return newArr
}
//調(diào)用
map([3,4,5],function(n){
n = n * 2
})
函數(shù)的通用性越高,調(diào)用起來越麻煩翩活。好比機器的功能越復(fù)雜,使用起來的配置就越麻煩一樣便贵。
每個函數(shù)只做一件簡單的事情菠镇。
局部變量應(yīng)該定義在靠近使用它的地方,提高可讀性承璃。
點擊查看上一篇我眼中的js編程(3)
我眼中的js編程系列是我個人的學(xué)習(xí)總結(jié)利耍,如有錯誤,煩請包涵盔粹、不吝賜教隘梨,O(∩_∩)O謝謝