JavaScriptにおける非バインド関数のコンテキスト
関数内でthisを指定しても、
何にもバインドされていない場合にどうなるか見てみましょう。次のようになります:
function func() {
console.log(this);
}
func();
この場合の結果は、
厳格モード
かどうかに依存します。非厳格モードの場合、
thisにはwindowへの参照が格納されます:
function func() {
console.log(this); // windowへの参照
}
func();
一方、厳格モードの場合、thisには
undefinedが格納されます:
"use strict";
function func() {
console.log(this); // undefined
}
func();
上記の説明から、厳格モードではthisが常に
undefinedになると思われるかもしれません。
そうとは限りません!関数の外で単純にthisを
出力すると、モードに関係なくwindowへの参照になります:
"use strict";
console.log(this); // thisにはwindowへの参照
まとめ
どの関数内でもthisを書くことができ、
それはJavaScriptのエラーを引き起こしません。
しかし、このthisに実際に何が入るかは、
関数が呼び出される瞬間まで定義されません。
さらに、関数の呼び出しごとにthisの値は
異なる可能性があります。すべては関数が呼び出された
コンテキストに依存します。