wtfjsに下のような面白いものが登録されました。 alert.call.call.call.call.call.apply(function (a) {return a}, [1,2]) // 2 確かに、どうしてこうなるのかは直ぐには分かりません。一つ一つゆっくりと確認してみましょう。 関数コールのobj.func(arg,...)という形式は、obj.func部分の評価結果は参照型(reference type)となりますが、obj部分の評価結果は値になります。(詳しくは関連エントリ[2]をご覧ください) なので、 func1.func2.func3(arg,...); という形式は、func1.func2部分を評価して結果を変数に代入しても結果は変わりません。 つまり、下記のようにしても動作は同じです。 var fn = func1.func2; fn.func3(arg,..);