2017-03-22 6 views
3

私は今日同僚のコードを使っています。以前は見たことがないものを見ました。Node.jsのrequireステートメントの後の2番目の括弧セットは何ですか?

私はこの文の最初の部分を理解しています(ファイルclean.jsに必要です)。

しかし、第2セットのか​​っこは何ですか?

をパラメータとして、それがちょうど'js''./dist/js'で呼び出されていますので、

./tasks/cleanからエクスポートされたものは何でも
require('./tasks/clean')('js', './dist/js') 
+0

ユニットに電話する必要があります... JavaScriptにはショートカットがたくさんあります –

答えて

8

は、関数であることは、以下と等価です:

const clean = require('./tasks/clean'); 
clean('js', './dist/js'); 
+0

ありがとうございました。時々、すべてのショートカットは私には分かりません。 – Showcaselfloyd

+1

もちろん、どうしてですか?単一の関数をエクスポートしているモジュールがある場合は、このように呼び出しても構いません。関数がファイル全体で再利用される場合は、その関数を変数に代入して参照することができます。 (私の例のように) –

2

あなたが見ているこの構文Functional programmingパラダイムで合成可能な関数を書く際に一般的な手法であるFunction curryingと呼ばれています。 CurryingやFunctional Programmingは新しいコンセプトではなく、何十年も前から存在してきましたが、Functional programmingはJavaScriptコミュニティで本当に人気を博し始めています。

基本的には、関数を呼び出す関数から関数呼び出しを呼び出すことができます。

関数を返すこの機能考えてみましょう:

1 
2 
:どのコンソールに出力します

foo(1)(2); 

:この関数を呼び出すときに、今、あなたは今、これを行うことができます

function foo(x) { 
    console.log(x); 
    return function(y) { 
    console.log(y); 
    } 
} 

投稿した例では、clean()関数は関数を返す必要がありますそれは2つのパラメータを受け入れ、次のように:

function clean(a) { 
    return function(b, c) { 
    console.log(a, b, c); 
    } 
} 

、それはこのように呼ばれることができるようになります:

clean('foo')('bar', 'baz'); 
//=> 'foo' 'bar' 'baz' 

これは、超基本的な例でしたが、私はこのことができます願っています!

関連する問題