簡體   English   中英

訪問變量到javascript函數

[英]Accessing a variable to javascript function

我知道這個問題聽起來很愚蠢。 但我實際上需要幫助。

我有一個局部變量。 我想在javascript函數中訪問該變量。

我知道有兩種方法可以做到。

第一種方法是將它作為參數傳遞給函數。

下一種方法是將局部變量設置為全局變量並訪問函數中的全局變量。

    <script type="text/javascript">

        function func1(j)
        {
            alert(j);
        }

        function func2()
        {

            alert(globali2);
        }

        function test()
        {
            var i1 = 10;
            // First way. Passing argument to function
            func1(i1);

            // Second way. Using global variable.
            var i2 = 22;
            globali2 = i2;
            func2();
        }

        test();

    </script>

有沒有其他方法來訪問函數內的變量。

謝謝,保羅

更新:

我想從第二個函數訪問第一個函數中定義的變量。 我將無法更改第二個功能的功能簽名。 我現在唯一的解決方案是使用全局變量。 我只是希望有另一種方法,而不是使用全局變量。

Javascript有一個非常重要的設計模式可以解決您的問題: 命名空間 它提供了一種處理許多不同函數所需的變量的方法,而不必每次都將它們作為參數處理,並且還避免使用全局變量。 這樣,只需在全局空間中創建一個成員 - 您的命名空間,您的腳本就會產生“最小占用空間”。 jQuery是使用這種設計模式的最突出的例子。

Javascript有一個非常強大的功能( 一流的成員 )。 這意味着您可以嵌套它們:

// this is your namespace - it is the only point of access to your script
// no variable will leak out of it's scope
var yourNamespace = (function(){

    // these variables are local, but can be accessed
    // within every function of your namespace
    var pseudoglobal1 = ["foo","bar"],
        pseudoglobal2 = "123";

        function func1(){
            alert(pseudoglobal1 );
        }
        /*additional functions you need*/

        // functions you want to make public are returned here
        // IMPORTANT: the { must not be on a newline!
        return {
            publicName : func1
        }
})();

這樣你就可以避免討厭的全局變量,但仍然可以在所有函數中使用重要的變量。

第三種方式,非常簡單的方法:您可以在與局部變量相同的范圍內定義您的函數。 例如,如果您定義一個函數

func3() {
   alert(i1);
}

在函數test()里面,這個函數將能夠返回i1!

請參閱以下代碼:

function test()
{
   var i1 = 10;
   // First way. Passing argument to function
   func3()
   {
      alert(i1);
   }
   func3(); // this will alert i1
}

編輯(刪除一些內容): 這被命名為“閉包”(內部函數可以訪問外部函數的變量),這是一個非常有趣的Javascript概念!

暫無
暫無

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

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