1

完全なコードは

    var b = 10,
    c = (
            20,
            function(x) {return x + 100},
            function() {return arguments[0]}
        );
a = b + c({x:10}).x  // => 20

どうしたら理解できるc({x:10}).x...

4

3 に答える 3

6

まず、コードを読みやすいように書き直してみましょう。

この構文(x, y, z)は最後の項目 ( z) に評価されるため、次のようになります。

var b = 10, c = function() { return arguments[0] };
a = b + c({ x: 10 }).x  // => 20

さて、c関数は最初の引数を返しますが、これはここでは意味がないので、削除しましょう:

var b = 10;
a = b + ({ x: 10 }).x  // => 20

ここではオブジェクト リテラル{ x: 10 }も役に立ちません。xプロパティを取得してから破棄するだけなので、次のようになります。

var b = 10;
a = b + 10  // => 20

それは今意味がありますか?

于 2013-03-20T03:42:50.593 に答える
0

こんなふうになります:

課題:

c = (
        20,
        function(x) {return x + 100},
        function() {return arguments[0]}
    );

括弧内の最後の式を に代入しcます。最初の 2 つの式 (20およびfunction(x) {return x + 100}) は評価されますが、割り当てには使用されません。これは、実際のコンマ演算子の例です。コンマで区切られた一連の式は、最後の式の値を持ちます。

その時点でc、関数はfunction() {return arguments[0]}.

次に、cが引数で呼び出され{x:10}、 object が返されます{x:10}。次に、は、値が 10.xのプロパティを抽出しxます。これがb(値も 10 である) に追加され、 に 20 の値が割り当てられaます。

単純!

于 2013-03-20T03:42:38.230 に答える
0

JavaScript では、 をa,b,c返すcのでc = function () {return arguments[0];}

c({x:10})返品{x:10}

c({x:10}).x戻り値10

そうb+c返す20

于 2013-03-20T03:43:17.737 に答える