Javascript变量还原为原始变量
所以我有这段代码。我有一个名为Javascript变量还原为原始变量,javascript,Javascript,所以我有这段代码。我有一个名为imgtemp的全局变量,但每次我在if(inMask)块中设置它时,调用start()时,它都会恢复为未定义。为什么会这样 首先调用loadAll(),然后调用start()。我可以确认,在loadAll()中调用start()的代码执行时,imgtemp已经返回到未定义状态 提前谢谢 这是因为loadAll变为异步,并在加载任何内容之前返回,所以当您调用start时,尚未设置映像。你将需要“链接”它们,而不是单独调用它们 仅调用loadAll(),然后在load
imgtemp
的全局变量,但每次我在if(inMask)
块中设置它时,调用start()
时,它都会恢复为未定义。为什么会这样
首先调用loadAll(),然后调用start()。我可以确认,在loadAll()中调用start()的代码执行时,imgtemp已经返回到未定义状态
提前谢谢 这是因为loadAll变为异步,并在加载任何内容之前返回,所以当您调用start时,尚未设置映像。你将需要“链接”它们,而不是单独调用它们 仅调用loadAll(),然后在loadAll中添加一个事件处理程序,用于加载映像,该映像在加载时调用start()函数
function loadAll() {
var zip64;
var zipURL = 'settings/Images.zip';
var xhr = new XMLHttpRequest();
xhr.open('GET', zipURL, true);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (this.status == 200) {
var responseArray = new Uint8Array(this.response);
var d = responseArray.length;
var binaryString = new Array(d);
while (d--) {
binaryString[d] = String.fromCharCode(responseArray[d]);
}
var data = binaryString.join("");
zip64 = window.btoa(data);
zip.createReader(new zip.Data64URIReader(zip64), function(reader) {
reader.getEntries(function(entries) {
z = 0;
zloopid = setInterval(function() {
if (z >= entries.length || !entries[z]) {
clearInterval(zloopid);
reader.close();
start();
return;
}
if (entries[z].filename.split("/")[0] == "__MACOSX") {
z++;
return;
}
$("#loadimg").html("Loading " + entries[z].filename + ".... (" + (z + 1) + " of " + entries.length + ")");
var isMask = (entries[z].filename.replace(/^.*[\\\/]/, '') == "mask.jpg");
entries[z].getData(new zip.Data64URIWriter(), function(uri) {
if (isMask) {
imgtemp = new Image();
imgtemp.src = uri;
}
else {
var lol = new Image();
lol.src = uri;
imageLibrary.push(lol);
}
});
z++;
}, 0);
});
}, function(error) {
window.location = "error.html?err=Error by unzipper: " + error + " (Problem in Images.zip)";
});
}
else {
window.location = "error.html?err=Error while retrieving zip file (" + zipURL + ") : " + this.status;
}
};
xhr.send();
}
function start() {
var image = imgtemp;
width = image.width;
height = image.height;
/*snip*/
条目[z].getData(新zip.Data64URIWriter(),函数(uri){
如果(isMask){
imgtemp=新图像();
imgtemp.onload=函数(事件){
开始()/*我认为您需要共享调用start
和调用loadAll
的时间。我是说事件…另外,您必须检查是否有其他东西正在调用其他函数以使其未定义…您是否在函数中放置了调试器;
关键字并尝试使用Developer进行调试Toolbar@NaveedButt、 我编辑了答案。试着在loadAll
和start
的开头放一个debugger;
关键字,看看每个函数调用了多少次……在loadAll()中设置imgtemp之前调用了start()。问题是我不想加载start()加载imgtemp后,因为掩码图像可能不是唯一的图像。@ihsoyih只需计算要加载的图像数,当您有总数时,请调用start:)
/* snip */
entries[z].getData(new zip.Data64URIWriter(), function(uri) {
if (isMask) {
imgtemp = new Image();
imgtemp.onload = function(event) {
start(); /* <--- HERE */
}
imgtemp.src = uri;
}
else {
/* snip */