我真的不明白回调是如何工作的。这是代码(第 49-53 行是问题所在,我希望 n 等于我目录中的图像数量): http: //pastebin.com/HbALuzGE。我希望 onerror 回调会立即发生(因为 play() 调用 change() 它使用我的 n var),但事实并非如此,但我不知道如何纠正它。
问问题
134 次
1 回答
0
将回调视为异步运行函数的方法或方式。通常实现回调包括将函数作为参数或参数传递给现有函数。如果指定,则在满足所施加的条件时将调用第二个函数一次。如果我们想确保第一个函数的执行上下文已经执行,然后才传递给第二个函数,这很有用。这样我们将确保只有在第一个函数完全执行后才访问第二个函数。
使用回调的最佳示例是服务器请求和时间动画,其中确定函数内部执行的方法已完全满足是绝对重要的。这是一个使用回调的非常简单的示例:
function start(num1, num2, callback) {
console.log ("Number 1 is: " + num1 + " and Number 2 is : " + num2);
sum = num1 + num2;
if (callback) {
callback(sum);
}
}
start(8, 2, function(sum) { console.log ("Sum is: " + sum); });
我认为你应该简化你的代码。也许我错了,但我认为问题出在定义图像计数器时的最后一个函数中i
,但是当您传递给onload
函数时,您正在创建另一个执行上下文/闭包。
编辑
分析您的代码,我得出了以下解决方案。您可以使用以下方式遍历图像资产中的图像:
var images = [...];
for (var i = 0; i< images.length; i++) {
var img[i] = new Image();
img[i].onload = (function(img) {
return function () {
// do something here
}
img[i].src = images[i];
})(i);
}
...或另一种方式:
function loadImages(images, callback) {
var loadedImages = 0;
for(var i=0; i< images.length; i++) {
images[i] = new Image();
images[i].onload = function() {
if(++loadedImages >= images.length) {
callback(images);
}
};
images[i].src = images[i];
}
}
window.onload = function(images) {
var sources = [...]
loadImages(sources, function(images) {
// do something
});
};
在这种情况下,返回函数很重要,因为这样您会将执行委托给另一个函数。希望这会有所帮助,但我必须管理它不太清楚您要做什么。
于 2012-08-07T06:25:47.773 回答