3

この質問はばかげているように聞こえます。しかし、私は実際にこれについて助けが必要です。

私はローカル変数を持っています。JavaScript関数でその変数にアクセスしたい。

私はそれを行う2つの方法を知っています。

最初の方法は、関数に引数として渡すことです。

次の方法は、ローカル変数をグローバル変数に設定し、関数内でグローバル変数にアクセスすることです。

    <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>

関数内の変数にアクセスする他の方法はありますか。

ありがとう、ポール

アップデート:

2番目の関数から1番目の関数で定義された変数にアクセスしたい。2 番目の関数の関数シグネチャを変更できません。私が今持っている唯一の解決策は、グローバル変数を使用することです。グローバル変数を使用する以外の方法があればいいのにと思います。

4

2 に答える 2

0

Javascript には、問題を解決する非常に重要な設計パターンがあります。変数を毎回パラメーターとして渡すことなく、またグローバル変数を回避することなく、多くの異なる関数で必要な変数を処理する方法を提供します。このように、スクリプトは、グローバル スペース (名前空間) に 1 つのメンバーのみを作成することで、「最小限のフットプリント」を生成します。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
        }
})();

このようにして、厄介なグローバル変数を回避しますが、それでもすべての関数で重要な変数を使用します。

于 2013-06-20T07:50:20.587 に答える
0

3 番目の非常に簡単な方法: ローカル変数と同じスコープ内で関数を定義できます。たとえば、関数を定義する場合

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 の非常に興味深い概念です!

于 2013-06-20T07:50:57.723 に答える