JavaScriptのthisについてメモ
仕様を解説した記事を読んで
以下のJavaScriptの仕様に関する記事を読んでみますと、結構、勉強になることがあります。
「JavaScript の this キーワードに結びつけられる値はどのように決定されるのか (言語仕様の説明)」
気になったこと
以前私が書いたメモ(注1)では、次のようなサンプルを書いて説明していました。
var f = function(){ this.n = 12; }; /*関数呼び出しパターン ( this = グローバルオブジェクト )*/ f(); window.n; /* 12 */ /*即時関数 ( this = グローバルオブジェクト )*/ (function(){ this; /* グローバルオブジェクト */ })();
確かに、ブラウザのOpera12.13でチェックした限りでは、windowオブジェクトを返します。
これは、Function Call (注2)により、thisValue が undefinedになった結果、JavaScriptの仕様の「thisArg がnull か undefined であれば、ThisBinding にはグローバルオブジェクトがセットされる」(注3)が適用されたとみなしてもいいものかどうか迷っています。
少し、調査の必要がありそうです。
追記 (2月27日)
コメントでnobuoka さんから教えていただきました。「ThisBinding にグローバルオブジェクトがセットされているという理解でよいはず」だそうです。
注1「thisの遅延束縛 - JavaScriptの個人的なメモ (その3)」より引用
注2 Function Call
ECMA-262 5.1th の 11.2.3より
注3 thisArg が null か
ECMA-262 5.1th の 10.4.3.2の訳文、
http://vividcode.hatenablog.com/entry/js/this-keyword-specより引用