如何在JavaScript中生成全局变量?

如何在JavaScript中生成全局变量?,javascript,variables,scope,global,Javascript,Variables,Scope,Global,所以我希望仪表板能够在一个函数中修改,然后在另一个函数中显示。有点像java中的公共变量。这可能吗?请参阅下面的代码 var dashboard = new Array(); function init() { getXML(); //1. goto get XML 2.// XML Parser displayXML(); } function getXML() { console.log("getXML REACHED"); $.ajax({

所以我希望仪表板能够在一个函数中修改,然后在另一个函数中显示。有点像java中的公共变量。这可能吗?请参阅下面的代码

var dashboard = new Array();
function init() {
    getXML(); //1.  goto get XML 2.// XML Parser
    displayXML();
}

function getXML() {
    console.log("getXML REACHED");
    $.ajax({
        type: "GET",
        url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
        dataType: "xml",
        success: xmlParser
    });
}

function xmlParser(xml) {
    dashboard[0] = 7;
    console.log(dashboard);
});
}

function displayXML() {
    console.log("display xml function reached!!!");
    console.log(dashboard);
}
当我最后尝试获取
console.log(dashboard)
时,它说
dashboard未定义。我认为通过在我的功能之外声明dashboard,它将是全局的。我如何才能在一个函数中更改仪表板的内容,并在另一个函数中检索它们


与Javascript相比,我更熟悉Java。

Javascript中只有两种作用域—全局作用域和函数作用域。如果它不是在函数中声明的,那么它是全局的。如果它不是使用var声明的,它也是隐式全局的。

关键字
var
将变量声明为局部变量,否则您可以忽略它,它将使其成为全局变量

另一个选项是将其插入窗口对象,如下所示:

window.dashboard = new Array();
这是将变量插入全局范围的首选方法


还有一些关于不要滥用您可能知道的全局变量的废话。

ajax调用是异步的,因此在实际填充仪表板之前,在init()方法中调用displayXML()函数。因此,请改为:

var dashboard = new Array();
function init() {
    getXML(); //1.  goto get XML 2.// XML Parser
}

function getXML() {
    console.log("getXML REACHED");
    $.ajax({
        type: "GET",
        url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
        dataType: "xml",
        success: xmlParser
    });
}

function xmlParser(xml) {
    dashboard[0] = 7;
    console.log(dashboard);
    displayXML();
});
}

function displayXML() {
    console.log("display xml function reached!!!");
    console.log(dashboard);
}

如果您想在javascript中使用类似Java的类语义,请查看使用揭示模块模式


养成从一开始就正确组织javascript代码的习惯将为您省去许多麻烦。

您需要将
上下文传递给
$.ajax()


在修复缩进时,我注意到在
xmlParser
之后有一个额外的右括号和右大括号。这真的是你的代码所包含的吗?如果是这样,您应该修复语法错误并重新测试。不,不是这样。我在这里复制代码并使其出现在代码块中时遇到问题。4个空格的东西很奇怪,它在街区里画了一些线,有些没有。所以我基本上只是重写了一个非常简单的版本。有没有办法像“代码> <代码>那样把代码放在中间并格式化它?每行前面的4个空格看起来很乏味谢谢你的帮助!这很有效。有没有办法克服javascript的异步方面?例如,可能使用$(Document.OnReady)以便按照我希望从一个init方法调用函数的顺序调用函数,但确保它们等待一个init方法完成?您可以使ajax请求同步,如下所示:$.ajax({…您的东西…,async:false});但请尽量避免这种情况,因为这将导致在提取文件时浏览器停止响应。详情如下:
$.ajax({
    type: "GET",
    url: "file:///H:/ModelDisplayV1/ModelDisplayV1/files/dashboard.xml",
    dataType: "xml",
    context: this,
    success: xmlParser 
});