Javascript上下文混乱

时间:2013-12-09 17:01:32

标签: javascript

我有这个对象:

var test = {
 setup: function() { property = 'hello!'; console.log(this); }
};

当我运行test.setup();并打印test.property();时,它会给我undefined。我理解这是因为我需要做this.property,但我的问题是:为什么?

我可以通过test清楚地看到上下文是console.log(this)对象,但由于某种原因它不起作用。

由于

3 个答案:

答案 0 :(得分:2)

当JavaScript找到像property = 'hello!'这样松散的赋值时,它会创建一个全局变量(如果处于严格模式,则会引发错误)。因此,如果您希望它成为一个属性,您必须明确。

答案 1 :(得分:0)

因为在这种情况下,property = 'hello!'window.property = 'hello!'相同,而不是this.property = 'hello!'

如果您指定未声明的变量,它将创建一个全局变量。

答案 2 :(得分:0)

当您使用“no var”声明变量时,您将“意外地”创建全局变量(附加到窗口对象),因此经验法则:始终使用带有变量声明的“var”。 在这里使用“var”,您将创建局部变量来设置功能。<​​/ p>