var objectTest=
{
test1: function( )
{
val1 = 1;
},
// hows accessing the
test2: function( )
{
alert( val1 );
}
};
objectTest.test2( );
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
できません。2 つの関数を同時に実行することはできないため、このようにローカル スコープを共有することは不可能です。val1
オブジェクトのメンバーとして定義する必要があります。
最終的に何をしたいかによります。オブジェクトのパブリック メンバーにすることができます。
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( );
質問に直接答えるために、別の回答を追加します。
実際に関数へのローカル変数について話している場合、簡単な答えは、変数を参照する変数を持つ関数から関数を渡さない限り、それにアクセスできないということです。
これをクロージャーの作成と呼びます。
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()
関数は、ローカル変数を参照する関数を含むオブジェクトを返します。
それ(または同様のもの)は、関数内でアクセスできないローカル変数を参照するために必要なものです。