2012-02-24
JavaScriptの挙動は仕様を見ればだいたい書いてある
http://d.hatena.ne.jp/gfx/20120223/1329996834
(o.f=o.f)()はglobalになった
これの解釈はどうすれば…。
こういうのは仕様書見ればだいたい解決する。
今回は3rdを参照しましたが5thでも同じであろう。
メソッド呼び出しは11.2.3のFunction callsなので、それを見る。
=> 最初に(o.f=o.f)を評価
=> =を使っているので、11.13.1 Smple Assignmentのルールに従って処理される。
=> LeftHandSideExpression = o.f, AssignmentExpression = o.f
=> この処理の返り値は、GetValue(AssignmentExpression)である。
=> 8.7.1 GetValueは、プロパティの参照から値を取り出す。
=> つまり、単なるfunctionオブジェクトが返る
というわけで、裸の関数を呼んだ時と同じ挙動になる=レシーバはグローバルである
実際のところthisの挙動はそれほど複雑じゃなくて、
と解釈しておけば問題ないのでは。そして悩んだら仕様読む。
トラックバック - http://d.hatena.ne.jp/gnarl/20120224/1330011565
リンク元
- 265 http://pipes.yahoo.com/pipes/pipe.info?_id=7ed2910a6358c42a7305fae463b19704
- 106 http://b.hatena.ne.jp/hotentry/it
- 72 http://reader.livedoor.com/reader/
- 41 http://t.co/qv45Tyxy
- 33 http://www.todesking.com/
- 25 http://longurl.org
- 25 http://www.google.com/reader/view/
- 20 http://d.hatena.ne.jp/gfx/20120223/1329996834
- 19 http://b.hatena.ne.jp/
- 19 http://jser.info/post/18317558076
