【问题标题】: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

【讨论】:

  • 但这将如何使val1 本地化为test2()
  • 佩卡! LTNS。他问的是这个吗?
【解决方案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() 函数,该函数返回一个包含函数的对象,该函数引用局部变量。

      这(或类似的东西)是在函数中引用其他不可访问的局部变量所需要的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-16
        • 2022-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多