4

如何x从函数 B() 更改函数 A() 中的值

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打算覆盖变量时不要使用。使用var创建一个新变量,在声明它的范围内是本地的。这就是为什么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
    }
}

这两个变量属于不同的范围,如果您想从内部范围内访问外部范围的变量,只需访问它,而无需重新声明它。

您可能想查看http://www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdf上提供的“JavaScript 语言规范”文档,以了解 JavaScript 中的作用域、语句和其他基础知识如何工作。

于 2012-09-18T11:53:38.050 回答