完全なコードは
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