2013-10-07 93 views
3

Javascript允許我們編寫使用其參數的函數來構建並返回具有特定行爲的另一個(通常是匿名的)函數。 Currying就是一個例子。是否有返回函數的javascript函數的名稱?

爲了說明,這種方法可以用來優雅排序的上的任意屬性的對象的數組:

var sortOn = function(property) { 
    return function(a,b) { 
    return a[property].localeCompare(b[property]); 
    }; 
}; 
var myArray = [ {id:1, title:'Hello'}, {id:2, title:'Aloha'} ]; 
myArray.sort(sortOn('title')); // Aloha, Hello 
myArray.sort(sortOn('id')); // Hello, Aloha 

一般來說,是有,基於它的參數,返回Javascript函數的單詞另一個功能?

回答

3

返回函數的函數稱爲高階函數。

這是一個功能概念,主要用於將某些部分的東西抽象成較小的位,從而使代碼高效且乾淨地更快。

您的函數是一個更高階的函數,因爲它返回一個函數,該函數根據參數創建一個閉包 - 這很簡單。更高階的函數也可以是一個函數返回的東西,它使用另一個函數的結果作爲參數來產生結果。

仿函數只是函數對象的同義詞 - 也就是說,您可以像傳統變量那樣傳遞函數。在JavaScript中,所有函數(無論是聲明的,匿名的/命名的函數表達式,還是使用函數構造函數甚至內置函數製作的函數)都可以作爲普通變量傳遞,因此JavaScript中的函數是第一類對象。但是,這並不適用於你的函數,因爲你正在返回一個函數,而不是傳遞一個函數作爲參數。

+1

使用術語「仿函數」時要小心:它在函數式編程中有多個不相關的含義。 –

+0

@MattFenwick:雖然是真的,但我試圖按照給出的上下文給出它。 –

2

在計算機科學中,通常將函數作爲輸入或輸出操作,稱爲「高階函數」。