高階函數除了可以接受函數作爲參數以外,還可以把函數作爲結果值返回。
來實現一個對array的求和。傳統方法。
function sum(arr){
return arr.reduce(function(x,y){
return x + y;
})
}
console.log(sum([1,2,3,4]));
不返回求和的結果,而返回求和的函數。
function lazy_sum(arr){
var sum = function() {
return arr.reduce(function(x,y){
return x + y;
});
}
return sum;
}
var f = lazy_sum([1,2,3]);
console.log(f());
當我們調用lazy_sum時,返回的不是求和的結果,而是求和函數。調用函數f,纔會真正計算。
當lazy_sum返回函數sum時候,相關參數和變量都保存在返回的函數中,這種稱爲閉包。
閉包詳解:https://blog.csdn.net/dovlie/article/details/76339244
ES6新增了一種新的函數,叫做箭頭函數
x => x * x; 相當於
function (x) {
return x * x;
}
var res = (x) => {
if(x > 0)
return x * x;
else
return - x * x;
}
console.log(res(5));