var img = new Image();
var url = "some url "
var value = "old value"
img.onError = function() {
alert('Cannot load image: "'+som+'"');
};
img.crossOrigin = '';
img.onload = function() {
// do something
value = "New value"
};
img.src = som;
alert(value);// pops with "old value"
因为我没有在onload函数中做任何改变?我在onload函数中存储的结果不能全局使用?
答案 0 :(得分:0)
问题是,img.onload
内的函数是在alert(value)之后执行的;`。
时间轴:
value = "old value";
alert(value);
value = "new value";
如果您在加载图片后在浏览器控制台中键入value
,则应为“新值”。
答案 1 :(得分:0)
根据您的代码,预计alert
会显示"旧值"因为它在onload
回调之前执行。由于异步代码的神奇之处,执行顺序概述如下:
// 1: Declare variables
var img = new Image();
var url = 'some url';
var value = 'old value';
// 2: Assign callback
img.onload = function () {
// 4: Update value
value = 'new value';
};
// 3: Alert value
alert(value);
如果您不相信我,请在警报中添加延迟:
// THIS IS BAD CODE. It's just to prove that your callback is executing.
setTimeout(function () {
alert(value);
}, 10000);
只要您的图片加载时间不超过10秒,就可以获得您期望的输出。
答案 2 :(得分:0)
onload
之后的代码在执行之前不会等待它完成。
var value = 'old value';
img.onload = function () { // image did not load yet, still waiting
// do something
value = "New value"
};
alert(value); // doesn't care if onload is done or not
由于onload
在显示alert()
之前未执行,因此值未发生变化。你需要一个回调或类似的东西
var value = 'old value';
img.onload = function () {
// do something
value = "New value"
imageLoaded();
};
function imageLoaded() { // or just give the value as parameter
alert(value);
}