【JavaScript入門】非StrictとStrictモードでのthisの振る舞い

非StrictとStrictモードでは、関数にthisとして渡した値が

オートボクシングされる / されない

という違いがあります。

以下では、それぞれのモードでthisの振る舞いについて比較しています。

非Strictモードでのthisの振る舞い

非Strictモードの場合、関数にthisとして渡された値は、オブジェクトにオートボクシングされます。

厳密には、undefined や null はグローバルオブジェクト(Windowオブジェクト)に、プリミティブ型の値は、オブジェクトに変換されます。

例えば、次のような this を返すだけの関数がある場合

この関数にthisとして渡された値は、次のようにオートボクシングされて返されます。

Strictモードでのthisの振る舞い

Strictモードでは、関数にthisとして渡された値は、オートボクシングされず、そのままの値が渡されます。

先ほどの関数をStrictモードで呼び出すと次のようになります。

まとめ

非StrictモードとStrictモードでは、thisの振る舞いが大きく違うため、非Strictモード から Strictモード への変更(逆も)注意が必要です。

モードを変更する場合は、thisを使用している箇所を十分に洗い出してから変更しないと思わぬ不具合になるかもしれません。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする