Hatena::ブログ(Diary)

<s>gnarl,</s>技術メモ”’<marquee><textarea>¥ このページをアンテナに追加 RSSフィード Twitter

2012-02-24

JavaScriptの挙動は仕様を見ればだいたい書いてある

http://d.hatena.ne.jp/gfx/20120223/1329996834

(o.f=o.f)()はglobalになった

これの解釈はどうすれば…。

こういうのは仕様書見ればだいたい解決する。

ECMAScript - Documentation

今回は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