如果我将全局变量x声明为:
var x = "I am window.x";
x将是window对象的公共属性。 如果我调用全局函数(不使用“call”,“apply”或首先将它附加到另一个对象),则窗口对象将作为上下文(“this”关键字)传入。 就像它在当前上下文中选择x属性一样,恰好是窗口。
但是,如果我在函数内部以相同的方式声明变量,则使用该函数作为构造函数,属性x将不是我刚刚构造的对象的公共属性(当前上下文)。我很高兴(我知道我可以这样做。= ...),但这看起来有点像矛盾。
我是否误解了某些事情(关于它是一种矛盾/不同的行为)?有人能够解释发生了什么,还是只是我必须接受的东西?
希望我的问题很明确。
答案 0 :(得分:4)
答案 1 :(得分:0)
你在这个小提琴中有一些例子:
var x = 42;
function alertXs() {
this.x = 'not 42'; // this = window
var x = '42 not'; // local x
alert('window.x = ' + window.x); // 'not 42'
alert('this.x = ' + this.x); // 'not 42'
alert('x = ' + x); // '42 not'
}
alertXs();
http://jsfiddle.net/Christophe/Pgk73/
有时,创造微小的小提琴有助于理解......
但是你很了解本地和公共变量,因为你很好地解释了......
答案 2 :(得分:0)
您对属性和构造函数的理解很好;你缺少的概念是'范围'和'封闭'。这是var
发挥作用的地方。