Javascript 从不同的.JS文件引用函数中的数组

Javascript 从不同的.JS文件引用函数中的数组,javascript,arrays,Javascript,Arrays,所以我发现自己处于尴尬的境地,在main.js中有一个函数,它需要在second.js中填充一个数组 简言之,main.js中的函数旨在可重用: function chug() { p1.innerHTML = st_a[0]; p2.innerHTML = st_a[1]; ... } 现在,“st_a”应该被解析为:st_+,在这种情况下,变量是“a”。第二个.js文件将具有多个数组(st_a、st_b等),根据需要,相关数组将用于填充段落元素(p1、p2等) 有什

所以我发现自己处于尴尬的境地,在main.js中有一个函数,它需要在second.js中填充一个数组

简言之,main.js中的函数旨在可重用:

function chug()
{
    p1.innerHTML = st_a[0];
    p2.innerHTML = st_a[1];
    ...
}
现在,“st_a”应该被解析为:st_+,在这种情况下,变量是“a”。第二个.js文件将具有多个数组(st_a、st_b等),根据需要,相关数组将用于填充段落元素(p1、p2等)


有什么想法吗?

如果st_x[x]是一个全局变量,您可以使用
窗口['st_a']
引用它。因此,您应该能够使用以下内容:

function chug()
{
    var arrid = 'st_'+'a';
    p1.innerHTML = window[arrid][0];
    p2.innerHTML = window[arrid][1];
    //...
}
var myArrays = {
  st_a: [],
  st_b: [],
  st_c: [],
  get: function(id){
    return this['st_'+id];
  }
  /* etc */
}
或使用函数检索数组:

function getArr(id){
  return window['st_'+id];
}
或者,您可以将
second.js
中的容器对象与“get”方法一起使用,例如:

function chug()
{
    var arrid = 'st_'+'a';
    p1.innerHTML = window[arrid][0];
    p2.innerHTML = window[arrid][1];
    //...
}
var myArrays = {
  st_a: [],
  st_b: [],
  st_c: [],
  get: function(id){
    return this['st_'+id];
  }
  /* etc */
}
现在
chug
看起来像:

function chug()
{
    var arr = myArray.get('a');
    p1.innerHTML = arr[0];
    p2.innerHTML = arr[1];
    //...
}

使用全局变量是邪恶的。因为你可以重写另一个已经设置好的脚本,javascript不会告诉你你做了什么蠢事

您有几种选择可以避免使用它们:

  • 使用单个对象包含所有函数。此示例应向您展示如何执行此操作:

    var MYAPP={} MYAPP.chug=函数(){ //你的代码 } //然后,在此文件之后加载的任何其他文件中,您可以执行以下操作: MYAPP.anotherFunction=函数(){} //即使这样: MYAPP.chug()

这样,只使用一个变量就污染了全局范围

  • 另一种方法是使用诸如的库
然后,要解决您的问题,您可以根据选择的解决方案执行以下操作:

// Let me borrow this code from kooiinc
MYAPP.myArrays = {
   st_a: [],
   st_b: [],
   st_c: [],
   get: function(id){
       return this['st_'+id];
   }
   /* etc */
}
MYAPP.chug = function() {
    var arr = this.myArrays.get('a') // 'this' refers to the MYAPP object in this case
    p1.innerHTML = arr[0]
    // ...
}

好的,让我看看我是否明白了。。。将second.js中的数组“st_a”声明在函数外部会使其成为全局数组?一个未在命名空间或函数范围内赋值的变量。。。是的,应该是全球性的。但是还有其他解决方案(比如使用名称空间并将数组指定为属性)。。。先生,你应该得到一枚该死的奖章。。。它通过使用window[arrid][0]工作。。。介意解释一下这背后的逻辑吗,这样我才明白你帮我省了多少麻烦…?嗨,阿披舍克,查查。在我的回答中,我提供了另一种选择,因为使用全局变量被认为是需要避免的(请参阅:)。