x
関数 A() の値を関数 B() から変更する方法
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
// From here i want to change the value of x (i.e. x=10 to x=40)
}
B();
}
A();
x
関数 A() の値を関数 B() から変更する方法
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
// From here i want to change the value of x (i.e. x=10 to x=40)
}
B();
}
A();
var
変数を上書きする場合は使用しないでください。Usingvar
は、宣言されているスコープに対してローカルな新しい変数を作成します。x
外側が変わらないのはそのためです。
function A() {
var x = 10;
function B() {
x = 20; // change x from 10 to 20
}
B(); // x is now changed
}
あなたの質問を理解できれば、次のコードが解決策です。
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
// From here i want to change the value of x (i.e. x=10 to x=40)
changeX(40);
}
function changeX(y) {
x = y;
}
B();
alert(x);
}
A();
ただし、よりエレガントなアプローチがありますが、それはアプリケーションによって異なります。
多分:
function A() {
var x = 10; // Value to be changed
function B() {
var x = 20;
return x; // Return new value of x
}
x = B(); // Set x to result returned by B(), i.e. the new value
}
A();
このvar
ステートメントは新しいローカル変数を作成します。あなたの例では:
function A() {
var x = 10; // You can think of it as A.x
function B() {
var x = 20; // And this as A.B.x
}
}
これらの 2 つの変数は異なるスコープに属します。内側のスコープ内から外側のスコープの変数にアクセスする場合は、再宣言せずにアクセスするだけです。
スコープ、ステートメント、およびその他の基本が JavaScript でどのように機能するかを理解するために、 http: //www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdfで入手可能な「JavaScript 言語仕様」ドキュメントをチェックアウトすることをお勧めします。