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

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

objectTest.test2( );
4

4 に答える 4

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
于 2011-01-11T03:32:11.650 に答える
1

できません。2 つの関数を同時に実行することはできないため、このようにローカル スコープを共有することは不可能です。val1オブジェクトのメンバーとして定義する必要があります。

于 2011-01-11T03:32:27.833 に答える
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( );
于 2011-01-11T03:32:41.650 に答える
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()関数は、ローカル変数を参照する関数を含むオブジェクトを返します。

それ(または同様のもの)は、関数内でアクセスできないローカル変数を参照するために必要なものです。

于 2011-01-11T03:56:49.573 に答える