我遇到这个变量的问题,不想在函数外工作,我只是不明白为什么!这是代码:
globalData = new Array();
//
// Colors
//
if ( settings.category == 'colors' ) {
$.getJSON(colorLoversURL, function(data) {
for ( var i in data ) {
var localData = data[i].hex;
globalData.push(localData);
}
});
}
//
// Palettes
//
else if ( settings.category == 'palettes' ) {
$.getJSON(colorLoversURL, function(data) {
for ( var i in data ) {
var localData = new Array();
for ( var j in data[i].colors ) {
localData.push(data[i].colors[j]);
}
globalData.push(localData);
}
});
}
现在的问题是globalData只保留getJSON函数内部的值,并且在我需要它时,它只是空白(我在警告窗口中测试值)。我也尝试在代码前面打开和关闭'var'。这里有什么问题吗?
答案 0 :(得分:5)
您何时检查globalData?
对getJSON的两次调用都使用回调来操作globalData,因此在检查globalData之前可能还没有调用该函数。不要忘记你在那里使用异步javascript。
如果是这种情况,我建议使用功能链
function useGlobalData() {
alert(globalData);
//do other stuff
}
//
// Palettes
//
$.getJSON(colorLoversURL, function(data) {
for ( var i in data ) {
var localData = new Array();
for ( var j in data[i].colors ) {
localData.push(data[i].colors[j]);
}
globalData.push(localData);
useGlobalData();
}
});
答案 1 :(得分:0)
如果它在你的.js
文件上,则第一行必须是。{
var globalData = new Array();
或者如果它在<script type="text/javascript">...</script>
内,那么你的下一行将是
var globalData = new Array();
E.g。
<script type="text/javascript">
var globalData = new Array();
//Rest of JS code...
function whatever() {
}
</script>
然后globalData变得全球化。
答案 2 :(得分:0)
这应该有效。是否有可能代码以某种方式运行两次,导致globalData
重置为空数组?
答案 3 :(得分:-1)
您正在javascript闭包内操作,并且在闭包内部有一个不同的范围。
这意味着您只能访问范围内定义的内容。
简单地说x = something()不会创建一个全局(一个可以从所有范围访问的变量)。
要做到这一点,你需要做var x = something();