ネストされた関数のシナリオで「this」ポインターがどのように扱われるかについて質問があります。
次のサンプルコードをWebページに挿入するとします。ネストされた関数「doSomeEffects()」を呼び出すと、エラーが発生します。Firebugをチェックインしたところ、ネストされた関数にいるとき、「this」ポインターが実際にはグローバルな「ウィンドウ」オブジェクトを指していることがわかりました。オブジェクトの関数内でネストされた関数を宣言したので、関数に対して「ローカル」スコープを持つ必要があると考えたため、私は何かを正しく理解していないはずです(つまり、「this」ポインタは次のようにオブジェクト自体を参照しています。それが私の最初の「if」ステートメントでどのようになっているか)。
任意のポインタ(しゃれは意図されていません)をいただければ幸いです。
var std_obj = {
options : { rows: 0, cols: 0 },
activeEffect : "none",
displayMe : function() {
// the 'this' pointer is referring to the std_obj
if (this.activeEffect=="fade") { }
var doSomeEffects = function() {
// the 'this' pointer is referring to the window obj, why?
if (this.activeEffect=="fade") { }
}
doSomeEffects();
}
};
std_obj.displayMe();
this
、関数が呼び出されるオブジェクトを指します。
var self = this;
あり、self
クロージャーを介して内側の関数で参照します。
doSomeEffects
特にobjに関連付けられていないためthis
、すべての要素の母であるウィンドウであると見なされます。