JavaScriptにおける非バインド関数のコンテキスト

関数内でthisを指定しても、 何にもバインドされていない場合にどうなるか見てみましょう。次のようになります:

javascriptfunction func() {
  console.log(this);
}

func();

この場合の結果は、 厳格モード かどうかに依存します。非厳格モードの場合、 thisにはwindowへの参照が格納されます:

javascriptfunction func() {
  console.log(this); // windowへの参照
}

func();

一方、厳格モードの場合、thisには undefinedが格納されます:

javascript"use strict";

function func() {
  console.log(this); // undefined
}

func();

上記の説明から、厳格モードではthisが常に undefinedになると思われるかもしれません。 そうとは限りません!関数の外で単純にthisを 出力すると、モードに関係なくwindowへの参照になります:

javascript"use strict";
console.log(this); // thisにはwindowへの参照

まとめ

どの関数内でもthisを書くことができ、 それはJavaScriptのエラーを引き起こしません。 しかし、このthisに実際に何が入るかは、 関数が呼び出される瞬間まで定義されません。 さらに、関数の呼び出しごとにthisの値は 異なる可能性があります。すべては関数が呼び出された コンテキストに依存します。