簡體   English   中英

如何理解具有多個參數的函數的組成?

[英]How to understand composition of functions with multiple arguments?

如:

var foo = function (a, b) { return a + b; };
var bar = function (a, b) { return a * b; };

var fn = _.compose([foo, bar]);

如何理解fn

這是行不通的。

首先, _.compose()不采用數組。 它采用函數列表作為單獨的參數,如下所示:

var fn = _.compose(foo, bar);

然后,即使這樣做,也要使用下划線的_.compose() ,每個后續函數都將傳遞前一個函數的返回結果。 由於您的兩個函數都需要兩個參數並返回一個參數,因此這將不起作用。

如果您修復了將參數正確傳遞給_.compose() ,則將具有以下內容:

var foo = function (a, b) { return a + b; };
var bar = function (a, b) { return a * b; };

var fn = _.compose(foo, bar);

然后如果您使用fn像這樣:

fn(2, 5);

它將嘗試執行:

foo(bar(2, 5));

打破這種分開, bar(2, 5)將返回10 ,所以你將不得不調用的結果foo(10)但其產生NaN ,因為第二個參數foo()undefined

_.compose專為列表中最后一個函數以外的函數而設計,這些函數對單個參數進行操作,該參數是列表中前一個函數的返回值。

顯示返回NaN實際實現: http : //jsfiddle.net/jfriend00/xhbcdh9k/

compose函數采用多個函數並返回一個函數。 因此,您可以這樣稱呼它: var fn = compose(foo, bar);

您可以將fn視為調用bar然后foo的結果。 例如bar(foo());

您的函數不會編寫,因為foo需要2個參數foo(a, b) ,但是bar返回1個值。

我寫過關於compose的文章,也許它可以幫助您更好地理解它。

[無恥的自我推銷]

我寫了一個小助手函數,其行為類似於compose,但還傳遞了其他參數:

const compound = (...fns) => (...args) =>
  fns
    .reverse()
    .reduce((result, fn) => fn(...[result, ...args.slice(1)]), args[0])

https://github.com/pdme/compound

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM