2017-02-02 9 views
2

d3-dragジャバスクリプト(ES6)モジュール用source code見のビットを持って、私は全体の内容ですconstant.jsと呼ばれるファイルがある気づいた:d3-dragライブラリの `constant.js`の目的は何ですか?

export default function(x) { 
    return function() { 
    return x; 
    }; 
} 

これはdrag.jsにインポートされます。

import constant from "./constant"; 

、その後は(3つの類似事例を示す)を使用:

drag.container = function(_) { 
    return arguments.length ? (container = typeof _ === "function" ? _ : constant(_), drag) : container; 
    }; 

おそらく、私はちょうどすべてのコールバック栄光でjavascriptを完全にgrokしていませんが、私はかなりconstant.jsモジュールの目的を理解していません。誰かがここで起こっていることについて少し明るい光を放つことができますか?

答えて

3

さて、それを介して

export default function(x) { 
    return function() { 
    return x; 
    }; 
} 

ステップ聞かせすることは、例えば、最初の引数た関数を返す関数であります

var fn = constant(4); 
fn() === 4; 

今度は

drag.container = function(_) { 
    return arguments.length 
    ? (container = typeof _ === "function" ? _ : constant(_), drag) 
    : container; 
}; 

ノートを見てみましょう、これはここで宣言されていない変数containerを使用し、外側のスコープ内に存在しています。起こって二つの部分がありますが、一つは、結果が使用パターンに依存し、他が渡されたタイプに依存していることであるそれでは、より多くのそれを分割してみましょう:。

var container; 

drag.container = function(_) { 
    if (arguments.length > 0) { 
    if (typeof _ === "function") { 
     container = _; 
    } else { 
     container = constant(_); 
    } 
    return drag; 
    } else { 
    return container; 
    } 
}; 
  • .container()は何と呼ばれていない場合引数の場合、container変数の現在の値が返されます。
  • .container(foo)が呼び出されるとfooが関数である場合、その関数はcontainer値となり、それが機能せずに呼び出された場合、constant非関数値fooを返す関数を作成するために使用されます。だから、constanttypeofと組み合わせる

containerは常に値を返す関数であることが保証されていることを意味します。

関連する問題