我对javascript对象相当新,我可以对调用变量使用一些说明。我试图在bar函数中调用测试变量。这可能吗?如果是这样,我该如何正确地做到这一点?
var foo = {
bar: function()
{
var test = 'Hello World';
},
speak: function()
{
// Log the Variable from above ^^
console.log(foo.bar.test);
}
};
由于
答案 0 :(得分:2)
没有;局部变量在其声明函数之外是不可见的。
相反,您需要向对象添加属性:
foo.test = ...;
你也可以设置foo.bar.test
;这将为函数对象添加属性。
答案 1 :(得分:1)
当你在函数中声明一个局部变量时,你将它添加到函数的VariableEnvironment
(它与外部LexicalEnvironment
基本没有区别,但ECMA区分它们)。该函数引用了声明它的范围的LexicalEnvironment
(在我们的例子中,是全局对象或窗口)。当您尝试从函数内部引用变量时,引擎首先在其中搜索函数的本地VariableEnvironment
,然后,如果未找到,则在外部{{1 }}。在您的情况下,您尝试从函数的外部引用变量,因此引擎在一开始就在全局对象的范围内搜索它。
因此,要完成任务,您应该在外部scrope中声明变量,然后在函数内部分配它,或者您应该向对象添加一个新属性然后引用它:
LexicalEnvironment
答案 2 :(得分:0)
您可以通过调用bar方法返回测试。
var foo = {
bar: function()
{
var test = 'Hello World';
return test;
},
speak: function()
{
// Log the Variable from above ^^
console.log(foo.bar());
}
};
答案 3 :(得分:0)
为了以这种方式访问变量测试,您需要将其定义为对象的属性,如下所示:
var foo = {
test: 'Hello World, before calling bar()',
bar: function()
{
this.test = 'Hello World';
},
speak: function()
{
// Log the Variable from above ^^
console.log(this.test);
}
};
console.log(foo.test);
我还使用关键字this更改了访问对象foo的函数。它通常会起作用,但有时候在javascript中跟踪你的范围可能会很棘手,所以只是试着去了解它。