如何在另一个函数中访问本地函数变量

时间:2011-01-11 03:28:34

标签: javascript local-variables

var objectTest=
{
    test1:  function( )
    {
       val1 = 1;
    },

    // hows accessing the 
    test2:  function( )
    {
       alert( val1 );
    }
};

objectTest.test2( );

4 个答案:

答案 0 :(得分:4)

如果不使用前缀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

答案 1 :(得分:1)

它不能。两个函数不能同时运行,因此以您显示的方式共享本地范围是不可能的。您必须将val1定义为对象的成员。

答案 2 :(得分:0)

取决于你最终想做什么。您可以将其设为对象的公共成员:

示例: 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( );

答案 3 :(得分:0)

添加另一个答案,以便更直接地回答问题。

如果你实际上是在谈论一个函数的本地变量,那么简单的答案是你可以访问它,除非你通过具有变量的函数之外的函数,它引用变量。

这称为创建闭包。

示例: 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()函数,该函数返回一个包含函数的对象,该函数引用局部变量。

那个(或类似的东西)就是在函数中引用一个不可访问的局部变量所需要的。