3

この質問を何と呼べばいいのか、Google で何を検索できるのか、本当にわかりませんでした。私は D3.js ライブラリのソース コードを理解しようとしていますが、私にとって新しい構文のために、まったく理解できない 2 つの関数に遭遇しました。

最初のものは数値補間器です:

function d3_interpolateNumber(a, b) {
  b -= a = +a;
  return function(t) { return a + b * t; };
}

ここの 2 行目で何が起こっているのでしょうか。bの値から の値を差し引いているaと...ええと、あなたは私を失いました。この構文はどのように機能しますか?

他の場所でも見た、私を混乱させるもう 1 つのことは、変数の右側の代入がコンマで区切られた複数の変数で構成される場合です。次のように:

var i = d3.interpolators.length, f;

これは何を意味するのでしょうか?これらのスニペットは、https://github.com/mbostock/d3/blob/master/src/interpolate/number.js および https://github.com/mbostock/d3/blob/master/src/interpolate/interpolate から取得したものです 。 .js

4

3 に答える 3

18

あなたが質問している最初の行は、2 つの割り当てだけです。これは次と同等です:

a = +a;
b -= a;

+a単項プラス演算子を使用して文字列を数値に変換しています。したがって、数値に変換aし、その数値を から減算しますb(そして、新しい値を に再割り当てしますb)。

あなたが尋ねている構文の 2 番目のビットは、単純に変数宣言のリストです。例えば:

var a, b, c; // Declares 3 variables, all initialised to undefined

それはこれと同等です:

var a;
var b;
var c;

あなたの例では、リスト内の宣言の 1 つにも代入が含まれています。それらはいくつでもできるので、これも有効です:

var a, b = 1, c = true, d;
于 2013-04-08T14:38:03.643 に答える
0

2行目は

 b -= (a = +a);

つまり:

  • (数値への変換) に設定aします。+aこの値を括弧の外に戻します。
  • 返された値が何であれ、それを b から引きます。

また

a=+a //converts a to an int
b-=a // or b=b-a

代入はその値を返すことに注意してください。だから、alert(a=1)警告し1ます。


一方で、

var i = d3.interpolators.length, f;

に分割:

var i = d3.interpolators.length;
var f;

これは基本的に、「次のコンマ区切りリストに var を適用する」という言い方です。

于 2013-04-08T14:41:17.820 に答える
0

割り当ては、割り当てられた値を返す式でもあります。したがって、この:

b -= a = +a;

以下と同じです:

b -= (a = +a);

また:

a = +a;
b -= a;

右辺が実際にコンマで区切られた値である場合、つまり:

var i = (d3.interpolators.length, f);

コンマ演算子は最後のオペランドの値を返すため、次のようになります。

d3.interpolators.length;
var i = f;

ただし、括弧がないと、コンマは宣言された変数間の区切り記号であり、コンマ演算子ではないため、次と同じです。

var i = d3.interpolators.length;
var f;
于 2013-04-08T14:42:01.713 に答える