Вчера я нуждался в помощи и был представлен Closures (я все еще борюсь с этим).
В начале функции я создал массивы, которые должны заполняться значениями, созданными в дочерней функции. У меня было понимание, что return будет просто возвращать значения и магически обновлять массив, по-видимому, так не происходит. Я тоже пробовал толкать, но опять-таки никакой магии.
eEndDesigning.onclick = publicity;
function publicity() {
var eCamerasArray = $(".cCameras").toArray();
// this is the array that needs to be updated with the annon. func. inside setTimeout func.
var iLeftPosArray = [];
// this is the second array that needs to be updated
var iTopPosArray = [];
for (var i = 0; i < eCamerasArray.length; i++) {
var timer = Math.floor(Math.random() * 300) + 100;
(function(i) // a closure function
{
window.setTimeout(function() {
// following two values are the ones that need to be fed back to 'global' arrays
iLeftPosArray[i] = Math.floor(Math.random() * 139) + 360;
iTopPosArray[i] = Math.floor(Math.random() * 160) + 100;
$(eCamerasArray[i]).animate({
left: iLeftPosArray[i] + "px",
top: iTopPosArray[i] + "px"
}, 100, "linear");
return [iLeftPosArray[i], iTopPosArray[i]];
}, timer);
}(i));
}
}