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

Passing javascript variables from one function/file to another

本文关键字:文件 函数 另一个 一个 变量 javascript      更新时间:2024-04-07

我有一个函数,其中定义了许多变量和非常大的数组;这使得函数非常大并且很难使用。如何在另一个文件中定义变量/数组并在该函数中使用它们?

示例:

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在这里是适用的,但我不想为这么小的东西调用任何其他库。

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

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

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

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

一个简单的方法可以是在你这样写的脚本之前添加脚本:

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

其他更复杂但只有在你打算重复这种行为时才可取是使用库或框架使include更加简洁,require.js就是的一个很好的例子

EDIT:在前面的例子中,我使用了带有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,即全局作用域"namespace"。