将javascript变量从一个函数/文件传递到另一个函数/文件

时间:2013-12-06 03:53:20

标签: javascript arrays function variables pass-data

我有一个包含大量变量的函数,并且定义了非常大的数组;这使得该功能非常大并且难以使用。如何在另一个文件中定义变量/数组并在此函数中使用它们?

示例:

DoStuff.js:

function genList(){
    var listData = [

    //lots of inner arrays and data

    ]

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

    //do stuff with the data
}

我正在尝试做什么:

ExternalData.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适用于此,但我不想将任何其他库调用为如此小的东西。

1 个答案:

答案 0 :(得分:1)

我会在对象中定义所有变量,例如:

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

此方法的优点是可以为所有变量创建一种名称空间,从而避免重写值。

然后使用某种include方法将该对象用于我的代码。

一种简单的方法可能是在您编写的脚本之前添加脚本:

<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访问该变量,因为您没有将变量绑定到任何特定范围,因此绑定到窗口objecy,这是全局范围“命名空间”。