我有这个对象:
var test = {
setup: function() { property = 'hello!'; console.log(this); }
};
当我运行test.setup();
并打印test.property();
时,它会给我undefined
。我理解这是因为我需要做this.property
,但我的问题是:为什么?
我可以通过test
清楚地看到上下文是console.log(this)
对象,但由于某种原因它不起作用。
由于
答案 0 :(得分:2)
当JavaScript找到像property = 'hello!'
这样松散的赋值时,它会创建一个全局变量(如果处于严格模式,则会引发错误)。因此,如果您希望它成为一个属性,您必须明确。
答案 1 :(得分:0)
因为在这种情况下,property = 'hello!'
与window.property = 'hello!'
相同,而不是this.property = 'hello!'
。
如果您指定未声明的变量,它将创建一个全局变量。
答案 2 :(得分:0)
当您使用“no var”声明变量时,您将“意外地”创建全局变量(附加到窗口对象),因此经验法则:始终使用带有变量声明的“var”。 在这里使用“var”,您将创建局部变量来设置功能。</ p>