我发现全局窗口对象的这种行为有点奇怪。
var x = 10;
function SomeClass(){
var y = 15;
console.log("Someclass:y - " + this.y); //prints undefined
}
console.log("window.x: " + window.x); //prints 10
var obj = new SomeClass();
console.log("obj.y: " + obj.y); //prints - undefined
变量 x 和 y 都是本地的(分别针对 window 和 SomeClass)。尽管从对象上下文调用 y ,但它只打印 undefined - 大概是因为这就是局部变量应该表现的方式。但是 window.x 通过打印 x 的值来表现不同。我知道这就是您创建全局变量的方式,但这是使局部变量表现得像对象变量的窗口的特殊属性吗?
最佳答案
根据 ECMAScript language specification :
本质上,这意味着 var 关键字在函数内部和全局作用域中的含义略有不同。
我认为一种看待它的方法是在全局范围内创建变量更像是在创建对象后在对象上设置实例变量,而不是设置局部变量。
比较在构造函数中设置局部变量:
function SomeClass(){
var y = 15;
}
var obj = new SomeClass();
console.log("obj.y: " + obj.y); //prints - undefined
并在创建对象后设置实例变量:
function SomeClass(){
}
var obj = new SomeClass();
obj.y = 15;
console.log("obj.y: " + obj.y); //prints - 15
关于Javascript 局部变量的工作方式类似于窗口中的类变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3415795/