1

所有源代码都可在此处获得:只需查看页面源代码。一半代码在该页面上,另一半在源代码中链接的“deputyDepot.js”文件中,也应该是可见的。

只是几件事:这显然仍在进行中。我在编码时非常杂乱无章,我倾向于跳来跳去,做一些这个和那个。所以有点乱。还有背景。我们就假装它不存在,好吗?

所以现在,解决问题!似乎我无法访问任何函数中的数组。

目前,我一直在测试的方式是修改我的主要功能(称为 weTalkNow(input))。它位于代理Depot.js 中。我将它设置为返回我正在测试的任何值,以查看它们的设置。这些值会打印在我的聊天框中。所以我像 console.log() 一样使用它。目前它被设置为返回用户输入的长度,但这完全无关紧要。

_inputArray 通过获取用户输入(字符串)并将其拆分为空格来填充。它在页面顶部声明。这一切都很好,花花公子。

出现问题的地方是如果手动填充数组。

var x = [ [1,2], [3,4] ];
/* Main Function */
function weTalkNow(){
    return x[0][0];
}

据我所知,该代码应该输出 1。但事实并非如此。当代码修改为此,它工作正常:

/* Main Function */
function weTalkNow(){
    var x = [ [1,2], [3,4] ];
    return x[0][0];
}

然而,这不是很有帮助。我需要一个全局数组,而不是本地数组。

让事情变得非常奇怪的是,如果我决定宣布

var x = [ [1,2], [3,4] ];

在我的主页(带有 HTML 和内容的那个)上,然后执行此操作

/* Main Function */
function weTalkNow(){
    return x[0][0];
}

在代理Depot.js 文件中,它工作正常。突然间,如果我在不同的页面上声明一个全局数组,它就可以正常工作。

如果我能以任何方式澄清任何观点,请告诉我。我试图提供我能提供的所有信息。也欢迎随机的小贴士,但我主要只关注这一点。

同样,我很清楚:无论出于何种原因,如果我手动填充它们,我就不能使用数组(我认为这与问题有关)。_inputArray 工作正常,因此该数组可以正常工作。它是唯一这样做的全局数组。但它不是手动填充的,而是通过 split 函数填充的。我似乎无法创建一个可由函数访问的全局数组。

编辑:

好的,我发现了问题!我正在编写的所有代码都可以正常工作,就像它应该的那样。问题是我的 .js 文件的最顶部是一个损坏的函数。第一行阻止了它下面的所有代码运行,因此我的数组从一开始就没有被初始化。出于这个原因,我无法访问它们。

一旦我检查了 Web 控制台,我就能解决所有问题。在发布这个问题之前,我不知道有一个网络控制台。

4

1 回答 1

1

如果您的函数引用了在调用函数的行下方声明的数组,则该数组将不在范围内。

myFunc();

function myFunc () {
    console.log(ra[0]); // won't work
};

var ra = ["a"];

这将起作用:

var ra = ["a"];

myFunc();

function myFunc () {
    console.log(ra[0]); // will work
};

要记住的另一件事是javascript包含也按顺序处理。还有一件事:换句话说,一般来说javascript是从上到下处理的;函数不能调用或引用文件中下一行定义的变量,这是一个例外。例外是您正在使用的命名函数。

这行不通。

var funcA = function () {
    funcB(); // wont work
};

funcA();

var funcB = function () {
    console.log("from funcB");
};

这将起作用:

funcC(); // works fine

function funcC () {
    funcD(); // works fine
}

function funcD () {
    console.log("from funcD");
};

这些细微的差异可能被认为代表了不完美的设计,但它们可以很好地工作。

于 2012-12-01T19:32:00.633 回答