2

多くの変数と非常に大きな配列が定義されている関数があります。これにより、関数が非常に大きくなり、操作が難しくなります。別のファイルで変数/配列を定義し、この関数で使用するにはどうすればよいですか?

例:

DoStuff.js:

function genList(){
    var listData = [

    //lots of inner arrays and data

    ]

    var dataItem = "value";//50 of these

    //do stuff with the data
}

私がやろうとしていること:

外部データ.js:

var listData = [

//lots of inner arrays and data

]

var dataItem = "value";//50 of these

DoStuff.js:

function genList(){

//call variables/arrays from ExternalData.js

//do stuff
}

注: ここでは JQuery を適用できますが、これほど小さなもののために他のライブラリを呼び出すのは避けたいと思います。

4

1 に答える 1

1

たとえば、オブジェクト内のすべての変数を定義します。

var obj = {
   array_one: ['x', 'y'],
   some_value: 'z'
}

この方法には、すべての変数に対して一種の名前空間を作成するという利点があり、値をオーバーライドする必要がありません。

そして、ある種のインクルード メソッドを使用して、そのオブジェクトをコードに使用します。

簡単な方法の 1 つは、次のように、作成中のスクリプトの前にスクリプトを追加することです。

<script type="text/javascript" scr="file_with_object.js"></script>

他のより洗練されたが、この種の動作を繰り返す場合にのみ推奨されるのは、ライブラリまたはフレームワークを使用してインクルードをより簡潔にすることです。require.jsは良い例です

編集: 前の例では、コードがグローバル スコープで記述されていることを考慮して var でオブジェクトを使用しました。変数がグローバルであることを確認するには、window.obj = {} を使用する方がよいと思います。そして、念のため、この window.somevariable のように定義した変数はすべてグローバル変数になります。グローバル変数を定義すると、コード内のどこでも使用できます (定義が行われた後)。ただし、名前空間は正しい方法です。

EDIT 2:この投稿は、インクルードよりもスコープに関するものだと思います。このように変数を宣言するvar some_variable;と、その変数を現在のスコープにバインドしたいと言っています。したがって、関数内でそれを行うと、その変数はその関数内で「生きます」:

var some_var = 10;
function(){
   var some_var = 5;
   console.log(some_var) // 5
}

console.log(some_var) // 10

ただし、両方のケースで var なしで変数を宣言すると、最初にその変数をグローバルにし、2 番目にその値をオーバーライドします。

    some_var = 10;
    function(){
       some_var = 5;
       console.log(some_var) // 5
    }
    console.log(some_var) // 5

そして、var なしで常に変数を宣言すると、その変数は window.variablename からアクセスできます。これは、変数を特定のスコープにバインドしていないためです。そのため、グローバル スコープの「名前空間」であるウィンドウ オブジェクトにバインドが行われます。

于 2013-12-06T04:10:39.327 に答える