JavaScript 変数のスコープの特定のケースについて理解できないようです。私が見つけた他の例や質問とは異なり、ネストされた関数のスコープに興味があります。
この JSFiddleで例を設定しました。関連する部分は次のとおりです。
function MyObject() {
var self = this;
var a = 1;
this.b = 2;
var innerMethod = function() {
//1 and 2: direct reference
logMessage("a = " + a); // a = 1
//logMessage("b = " + b); // Error: b is not defined
//3 and 4: using this
logMessage("this.a = " + this.a); // this.a = undefined
logMessage("this.b = " + this.b); // this.b = undefined
//5 and 6: using self
logMessage("self.a = " + self.a); // self.a = undefined
logMessage("self.b = " + self.b); // self.b = 2
}
}
a
これで、直接参照が機能することがわかりました。this.a
また、メッセージ 3 と 4 (と) は、内部関数を参照しているthis.b
ため失敗することも理解しています。this
また、元のオブジェクトへの参照を保存するため、6 行目が機能することも理解しています。
私が理解していないのは次のとおりです。
- メッセージ 1 と 2 が同じように機能しないのはなぜですか?
- メッセージ 5 と 6 が同じように機能しないのはなぜですか?