関数呼び出し後の2組の括弧


168

Angularjsでフィルターがどのように機能するかを調べていたところ、2組の括弧を送信する必要があることがわかりました。

$filter('number')(number[, fractionSize])

それは何を意味し、JavaScriptでどのように処理しますか?


7
個人的には、この構文も読みにくい/わかりにくいと感じています。ここで説明するようにしかし、あなたはアクセスAngularJSのフィルタに簡単な構文を使用することができます。stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

私はangularjsを例に取りました。自分で関数を作成する場合の処理​​方法を知りたいと思いました。
L105 2013

4
実際には「カレー」と呼ばれています。プログラミング手法。
サジューク

回答:


331

つまり、最初の関数($filter)が別の関数を返し、その返された関数がすぐに呼び出されます。例えば:

function add(x){
  return function(y){
    return x + y;
  };
}

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true

14
ES6矢印の機能を使用すると、それを次のように書くことができます:let add = (x) => (y) => x + y;
グイド

2
私をNoobと呼んでください。しかし、サブファンクションがどのように価値を保持できるかを説明するために、時間を割いてくださいx
Vikas Bansal

2
@VikasBansal関数内で別の関数への参照があり、その中に実行コンテキストがメモリ内にある限り、JavaScriptで関数が呼び出されるたびに、新しい実行コンテキストが作成されます。
Paul

11
なぜ2つの引数を渡さないのadd(x, y)ですか?そのように呼び出すことの利点はどこにありますか?
Piotr Pawlik 2017

1
この説明をありがとう!passportjs認証がどのように機能するかを理解するのに本当に役立ちました:passport.authenticate("local")(req, res, function(){
tidydee

22

$filter('number') 2つの引数を受け入れる関数を返します。最初の引数は必須(数値)で、2番目の引数はオプション(小数サイズ)です。

返された関数をすぐに呼び出すことができます。

$filter('number')('123')

または、将来使用するために返された関数を保持することもできます。

var numberFilter = $filter('number');

numberFilter('123')

この; 複雑に見えます:export const toursListQuery = gql` query ToursListQuery {tours {id name}} `; デフォルトのgraphql(toursListQuery、{options:{pollInterval:10000}、})(ToursList);をエクスポートします。
stackdave 2017年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.