完全なコードは
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...
完全なコードは
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...
まず、コードを読みやすいように書き直してみましょう。
この構文(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
それは今意味がありますか?
こんなふうになります:
課題:
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ます。
単純!
JavaScript では、 をa,b,c返すcのでc = function () {return arguments[0];}、
c({x:10})返品{x:10}、
c({x:10}).x戻り値10
そうb+c返す20