在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 高階函數(shù)
注釋
對象
創(chuàng)建
基本運算符
數(shù)據(jù)類型
函數(shù)
For 循環(huán)
Do...While 循環(huán)
長度
While 循環(huán)
比較運算符
索引
變量
高級運算符
枚舉
條件邏輯
If
原型
可變性
數(shù)字
創(chuàng)建
編程基礎(chǔ)
屬性
銷毀
創(chuàng)建
等式
長度
函數(shù)聲明
字符串
條件連接
循環(huán)
連接
引用
Else
數(shù)組
高階函數(shù)
全局化

高階函數(shù)

高階函數(shù)是操作其他函數(shù)的函數(shù)。舉個例子,一個函數(shù)可以將其他函數(shù)作為參數(shù)和/或產(chǎn)生一個函數(shù)作作為它的返回值。 精巧的 功能技術(shù)是非常強大的構(gòu)造,可在Javascript或其他高級語言比如python,lisp等中使用。

我們來創(chuàng)建兩個簡單的函數(shù),add_2double ,和一個高階函數(shù) mapmap 接受兩個參數(shù),funclist (它的聲明因此為map(func,list)),返回一個數(shù)組。func (第一個參數(shù))作為函數(shù)將被應(yīng)用到每個數(shù)組 list(第二個參數(shù))的每一個元素中。

// 定義兩個簡單函數(shù)
var add_2 = function(x) {
    return x + 2;
};
var double = function(x) {
    return 2 * x;
};

//  map接受兩個參數(shù)
//  func    調(diào)用函數(shù)
//  list    數(shù)組中元素值傳遞給 func 
var map = function(func, list) {
    var output=[];              // 輸出 list
    for(idx in list) {
        output.push( func(list[idx]) );
    }
    return output;
}

// 使用map將函數(shù)應(yīng)用于整個輸入列表
// 產(chǎn)生相應(yīng)的輸出列表
map(add_2, [5,6,7]) // => [7, 8, 9]
map(double, [5,6,7]) // => [10, 12, 14]

上述例子中的函數(shù)很簡單。然而在作為參數(shù)傳遞給其他函數(shù)時,可以使用特殊組合方法構(gòu)件更復(fù)雜的函數(shù)。

舉個例子,如果注意到在代碼中平凡使用調(diào)用方法map(add_2, ...)map(double, ...),可以創(chuàng)建兩個特殊用途的列表運行組合起來的函數(shù)。使用函數(shù)封裝,可以如下操作:

process_add_2 = function(list) {
    return map(add_2, list);
}
process_double = function(list) {
    return map(double, list);
}
process_add_2([5,6,7]) // => [7, 8, 9]
process_double([5,6,7]) // => [10, 12, 14]

創(chuàng)建一個 buildProcessor 函數(shù),它將函數(shù) func 作為函數(shù),返回一個 func處理程序,這個函數(shù)將列表作為輸入應(yīng)用到 func 。

// 函數(shù)產(chǎn)生一系列處理程序
var buildProcessor = function(func) {
    var process_func = function(list) {
        return map(func, list);
    }
    return process_func;
}
// 調(diào)用buildProcessor返回一個調(diào)用輸入列表的函數(shù)

// 使用buildProcessor產(chǎn)生 add_2 process_double:
process_add_2 = buildProcessor(add_2);
process_double = buildProcessor(double);

process_add_2([5,6,7]) // => [7, 8, 9]
process_double([5,6,7]) // => [10, 12, 14]

看另一個例子。 創(chuàng)建一個 buildMultiplier 函數(shù),將 x 作為輸入,然后一個對其參數(shù) x 相乘的函數(shù):

var buildMultiplier = function(x) {
    return function(y) {
        return x * y;
    }
}

var double = buildMultiplier(2);
var triple = buildMultiplier(3);

double(3); // => 6
triple(3); // => 9

{% exercise %} 定義一個 negate 函數(shù)將 add1 作為參數(shù),返回一個函數(shù),這個函數(shù)通過 add1 返回值的相反數(shù).(開始有點復(fù)雜了) {% initial %} var add1 = function (x) { return x + 1; };

var negate = function(func) { // TODO };

// 應(yīng)該返回 -6 // 因為 (5+1) * -1 = -6 negate(add1)(5);

{% solution %} var add1 = function (x) { return x + 1; }

var negate = function(func) { return function(x) { return -1 * func(x); } }

negate(add1)(5); {% validation %} assert(negate(add1)(5) === -6); {% endexercise %}

上一篇:長度下一篇:注釋