「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がグローバルオブジェクトを参照することは理にかなっています。また、の関数オブジェクトのメソッドであるため、理にかなっています。その内部はの関数オブジェクトを参照します。thisfunc1func3func1thisfunc3func1
気になるのはfunc2。thisネストされた関数の内部もグローバルオブジェクトを参照することになっていることは知っていますが、それがグローバルfunc2オブジェクトのメソッドではないため、理由はわかりません。私が理解している限り(そしてこれは私が完全に間違っているかもしれない部分です) 、の呼び出し(アクティブ化/変数)オブジェクトのメソッドです。さて、私がこれについて正しい場合(そして私が正しいかどうかわからない場合) 、グローバルオブジェクトの代わりにの呼び出しオブジェクトを内部で参照するべきではありませんか?func2func1thisfunc2func1
だから、私の質問は次のようになると思います:ネストされた関数は、ネストされた関数の呼び出し(アクティブ化)オブジェクトのメソッドですか?もしそうなら、グローバルthisオブジェクトの代わりにその呼び出しオブジェクトを参照するべきではありませんか?