4

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();
4

4 に答える 4

10

var変数を上書きする場合は使用しないでください。Usingvarは、宣言されているスコープに対してローカルな新しい変数を作成します。x外側が変わらないのはそのためです。

function A() {
    var x = 10;
    function B() {
        x = 20; // change x from 10 to 20
    }

    B(); // x is now changed
}
于 2012-09-18T11:28:18.247 に答える
4

あなたの質問を理解できれば、次のコードが解決策です。

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();

ただし、よりエレガントなアプローチがありますが、それはアプリケーションによって異なります。

于 2012-09-18T11:29:44.113 に答える
2

多分:

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();
于 2012-09-18T11:27:02.863 に答える
1

この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 言語仕様」ドキュメントをチェックアウトすることをお勧めします。

于 2012-09-18T11:53:38.050 に答える