簡體   English   中英

從內部函數訪問外部函數變量

[英]Access outer function variables from inner function

如何在函數B()中更改函數A()中的x

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 使用var創建一個新變量,該變量在聲明它的作用域的本地。 這就是為什么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
    }
}

這兩個變量屬於不同的范圍,如果要從內部范圍內訪問外部作用域的變量,只需訪問它,而不重新聲明它。

您可能需要查看http://www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdf上提供的“JavaScript語言規范”文檔,以了解范圍,語句和其他基礎知識如何在JavaScript中運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM