我似乎无法理解 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
直接有效。我也知道消息 3 和 4 ( this.a
and this.b
) 会失败,因为this
它指的是内部函数。我也知道第 6 行有效,因为我保存了对原始对象的引用。
我不明白的是:
- 为什么消息 1 和 2 不一样?
- 为什么消息 5 和 6 的工作方式不同?