1. 程式人生 > >js相關語法基礎(6)閉包

js相關語法基礎(6)閉包

高階函式除了可以接受函式作為引數以外,還可以把函式作為結果值返回。

來實現一個對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));