【问题标题】:How can a local function variable be accessible in another function如何在另一个函数中访问局部函数变量
【发布时间】:2011-01-11 03:28:34
【问题描述】:
var objectTest=
{
test1: function( )
{
val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( val1 );
}
};
objectTest.test2( );
【问题讨论】:
标签:
javascript
local-variables
【解决方案1】:
通过不使用前缀 var 将变量放在不同的(全局)范围内尝试:
test1: function() {
var val1=1;
},
正如@Pekka 指出的那样,您的示例(上面)需要首先调用objectTest.test1();(以创建val1),否则您会收到错误消息。如果您想要从两个位置访问变量,那么您应该使用不添加到全局范围的对象属性(如@patrick dw 建议)
objectTest.test1();
objectTest.test2(); //Shows: Alert-1
alert(val1); //Shows: Alert-1
val1=2;
objectTest.test(2); //Shows: Alert-2
【解决方案2】:
不能。两个函数不能同时运行,所以共享本地范围是不可能的,你展示的方式。您必须将val1 定义为对象的成员。
【解决方案3】:
取决于你最终想要做什么。您可以将其设为对象的公共成员:
示例: http://jsfiddle.net/wqr6W/
var objectTest=
{
val1: 'someDefault',
test1: function( )
{
this.val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( this.val1 );
}
};
objectTest.test1( );
objectTest.test2( );
这当然会更改您的原始代码。您实际需要做什么取决于您的情况。
或者这个:
示例: http://jsfiddle.net/wqr6W/1/
var objectTest=
{
val1: 'someDefault',
test1: function( )
{
this.val1 = 1;
},
// hows accessing the
test2: function( )
{
this.test1();
alert( this.val1 );
}
};
objectTest.test2( );
【解决方案4】:
添加另一个答案以便更直接地回答问题。
如果您实际上是在谈论函数的 local 变量,简单的答案是您可以不访问它除非您通过具有变量的函数之外的函数,它引用变量。
这称为创建闭包。
示例: http://jsfiddle.net/csd3s/
var objectTest=
{
test1: function( )
{
var val1 = 1;
return {getVal:function() {
return val1;
}};
},
// hows accessing the
test2: function( )
{
alert( this.test1().getVal() );
}
};
objectTest.test2( );
所以在test2 内部可以调用test1() 函数,该函数返回一个包含函数的对象,该函数引用局部变量。
这(或类似的东西)是在函数中引用其他不可访问的局部变量所需要的。