Javascript Обновление «глобального» массива со значением внутри функции - PullRequest
0 голосов
/ 18 января 2012

Вчера я нуждался в помощи и был представлен 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));
    }
}

1 Ответ

0 голосов
/ 18 января 2012

Возможно, вы захотите переместить массивы iLeftPosArray и iTopPosArray на один уровень вверх, поскольку в настоящее время они не являются глобальными, но имеют область действия функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...