我有一个包含大量变量的函数,并且定义了非常大的数组;这使得该功能非常大并且难以使用。如何在另一个文件中定义变量/数组并在此函数中使用它们?
示例:
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适用于此,但我不想将任何其他库调用为如此小的东西。
答案 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,这是全局范围“命名空间”。