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

此方法的优点是为所有变量创建一种命名空间,使您免于覆盖值。

然后使用某种包含方法将该对象使用到我的代码中。

一种简单的方法是在您正在编写的脚本之前添加脚本,如下所示:

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

其他更复杂但仅在您要重复这种行为时才可取的是使用库或框架使包含更简洁,require.js是一个很好的例子

编辑:在前面的示例中,考虑到代码是在全局范围内编写的,我使用带有 var 的对象,我认为使用 window.obj = {} 来确保变量是全局的会更好。而且,为了记录,您定义的任何变量都像这个 window.somevariable 将是一个全局变量。一旦你定义了一个全局变量,你就可以在代码中的任何地方使用它(在定义发生之后)。命名空间是正确的方法。

编辑2:我认为这篇文章更多的是关于范围而不是包含。当你以这种方式声明一个变量时:var some_variable;你是说你想将该变量绑定到当前范围。因此,如果您在函数内部执行此操作,则该变量“存在”在该函数内部:

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

console.log(some_var) // 10

但是,如果您在两种情况下都声明没有 var 的变量,那么您将第一次将该变量设为全局变量并在第二次覆盖其值:

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