Alp*_*pha 9 javascript scope scoping
我似乎无法理解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
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我明白了a直接作用的参考.我也理解消息3和4(this.a和this.b)将失败,因为它this引用了内部函数.我也明白第6行是有效的,因为我保存了对原始对象的引用.
我不明白的是:
变量a就是变量。innerMethod它在(这只是一个嵌套函数)的作用域中可见,as a,这就是它的声明方式(即JavaScript具有词法作用域规则,内部函数可以看到它们在其中定义的函数的变量)。
this与构造函数的本地范围不同MyObject。
您已经看到这是ofself的别名,并且已在其自己的范围内覆盖。不过,由于不是函数作用域的别名,因此也不会在这里工作。thisMyObjectinnerMethodthisthisself.athis.a
要获得词法作用域更严格的解释,您可以从维基百科开始:http://en.wikipedia.org/wiki/Scope_(computer_science)
您可以阅读 ECMA 标准中的执行上下文和标识符解析规则http://es5.github.com/#x10.3