如何在JavaScript中生成全局变量?
所以我希望仪表板能够在一个函数中修改,然后在另一个函数中显示。有点像java中的公共变量。这可能吗?请参阅下面的代码如何在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({
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
});