2012-12-01 144 views
1

所有源代码在这里可用:只需查看页面源代码。一半的代码在那个页面上,另一半在'sourcesDepot.js'文件中,该文件在源代码中被链接并且也应该是可见的。JavaScript奇怪的数组范围问题

只有几件事情:这显然仍然是一项正在进行的工作。编码时我非常混乱,而且我倾向于跳跃,做一点这个和一点点。所以这有点麻烦。也是背景。我们会假装不存在,好吗?

所以,现在,就这个问题!看来我无法访问任何函数中的数组。

目前,我一直在测试的方式是通过修改我的主要功能(称为weTalkNow(输入))。这是位于viceDepot.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]; 
} 

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

是什么让事情非常奇怪的是,如果我决定我的主网页(带有HTML和东西)上宣布

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

,然后在deputyDepot做到这一点

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

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

请让我知道,如果我能以任何方式澄清任何问题。我试图给我所有的信息,我可以。随机提示也是受欢迎的,但我主要只关注这一点。

再次,只是让我明白:不管是什么原因,我不能,如果我填充它们手动使用数组(我想这是主题相关的问题)。 _inputArray做的很好,所以数组工作正常。这是唯一的全球阵列。但它不是手动填充,而是通过拆分功能。我似乎无法创建一个可由函数访问的全局数组。

编辑:

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

一旦我检查了Web控制台,我就可以修复所有问题。发布此问题之前,我不知道有一个Web控制台。

+2

您的页面有JavaScript错误。先解决这些问题。 –

+0

@ user1689607小心一点? –

+0

我的意思是当我加载页面时在控制台中显示错误。你有浏览器的开发者控制台吗? –

回答

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"); 
}; 

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

+0

这是所有非常有用的信息。但是我的所有函数都被命名,而且我没有在使用它们的函数下面声明任何数组。 –

+0

我明白了。您能否重现您在http://jsfiddle.net/上遇到的问题的简化版本?我无法在您提供的链接中找到您提到的代码。 – robert

+0

感谢您的帮助!我最终解决了它。我编辑了我的问题来反映这一点。 –