「this
キーワードは常に、包含関数がメソッドであるオブジェクトを参照します。」
素晴らしい、十分に単純に聞こえますが、これが私が疑問に思っていることです...
例えば:
function func1() {
function func2() {
alert(this == window); // true
}
func2();
alert(this == window); // true
}
func1.func3 = function () {
alert(this == window); // false
alert(this == func1); // true
};
func1();
func1.func3();
さて、これfunc1
は実際にはグローバル( )オブジェクト(グローバルwindow
オブジェクトのプロパティfunc1
に割り当てられた関数オブジェクト)のメソッドであるため、 insideがグローバルオブジェクトを参照することは理にかなっています。また、の関数オブジェクトのメソッドであるため、理にかなっています。その内部はの関数オブジェクトを参照します。this
func1
func3
func1
this
func3
func1
気になるのはfunc2
。this
ネストされた関数の内部もグローバルオブジェクトを参照することになっていることは知っていますが、それがグローバルfunc2
オブジェクトのメソッドではないため、理由はわかりません。私が理解している限り(そしてこれは私が完全に間違っているかもしれない部分です) 、の呼び出し(アクティブ化/変数)オブジェクトのメソッドです。さて、私がこれについて正しい場合(そして私が正しいかどうかわからない場合) 、グローバルオブジェクトの代わりにの呼び出しオブジェクトを内部で参照するべきではありませんか?func2
func1
this
func2
func1
だから、私の質問は次のようになると思います:ネストされた関数は、ネストされた関数の呼び出し(アクティブ化)オブジェクトのメソッドですか?もしそうなら、グローバルthis
オブジェクトの代わりにその呼び出しオブジェクトを参照するべきではありませんか?