[再々追記] (o.f = o.f)()の結果は右辺値・左辺値というルールで説明できるようです。コメント欄参照のこと。 [/再々追記] [再追記] これの解釈はどうすれば…。 [/再追記] [追記] ([o.f][0])() -> o.f は ([o.f, "a"][0])() とすると分かりやすいが、単にレシーバがArrayになっているだけらしい。 また (o.f)()と(tmp = o.f)の違いはブコメで指摘されているとおり、 o.f が (C++的な意味での)参照を返すと考えると理解できる。 [/追記] だれかこの現象を説明できる人はいませんか。私には難しすぎます。 In node: #!/usr/bin/env node var o = {}, tmp; o.f = function() { console.log(this.toString()) }; o.toString =