Увеличение локальной переменной с помощью JavaScript - PullRequest
3 голосов
/ 16 мая 2011

Я пытаюсь увеличить счетчик, но я хотел бы переместить переменную из глобального пространства имен и объявить ее локально. Я не уверен, как это сделать. Спасибо за вашу помощь.

Это код, который я сейчас использую.

var mediaClickCounter = 0;
function refreshMediaAds() {
    if (mediaClickCounter < 2) {
        mediaClickCounter++;
    } else {
        mediaClickCounter = 0;
        refreshAds();
    }
}

Ответы [ 6 ]

10 голосов
/ 16 мая 2011
// the function creates a local scope. 
var refreshMediaAds = (function() { 
    var mediaClickCounter = 0;
    // once executed it returns your actual function.
    return function _refreshMediaAds() {
        if (mediaClickCounter < 2) {
            mediaClickCounter++;
        } else {
            mediaClickCounter = 0;
            refreshAds();
        }
    }
// you execute the function.
})();

Закрытие <3. </p>

2 голосов
/ 16 мая 2011

как насчет использования что-то вроде этого:

var ClickCounter = {
 mediaClickCounter: 0,

 refreshMediaAds:function() {
    if (this.mediaClickCounter < 2) {
        this.mediaClickCounter++;
    } else {
        this.mediaClickCounter = 0;
        refreshAds();
    }
 }
};

, и тогда вы можете просто использовать ClickCounter.refreshMediaAds(), который будет увеличивать переменную-член.

1 голос
/ 16 мая 2011

Возможно, вы можете создать какой-то объект и использовать функцию в качестве метода.Таким образом, переменная будет свойством объекта, а не глобальной переменной.

Если вы в настоящее время не используете какую-либо инфраструктуру, использование MooTools может вам очень помочь.Некоторые примеры создания и использования объектов находятся здесь: http://mootools.net/docs/core/Class/Class

0 голосов
/ 16 мая 2011

Если вы действительно должны, я думаю, что-то подобное поможет.Однако, IMO, вы должны просто оставить его в глобальном пространстве имен.

var refreshMediaAds = function() {
    var mediaClickCounter = 0;
    return function()
    {
        if (mediaClickCounter < 2) {
            mediaClickCounter++;
        } else {
            mediaClickCounter = 0;
            refreshAds();
        }
    }

}();

Обратите внимание, я не проверял это, это обоснованное предположение о решении.

0 голосов
/ 16 мая 2011
function refreshMediaAds() {
var mediaClickCounter = 0; // now variable have local scope.
    if (mediaClickCounter < 2) {
        mediaClickCounter++;
    } else {
        mediaClickCounter = 0;
        refreshAds();
    }
}
0 голосов
/ 16 мая 2011

Вы можете попробовать вернуть то, что у вас есть (так что вы можете использовать его позже, если хотите)

function refreshMediaAds(mediaClickCounter) {
    if (mediaClickCounter < 2) {
        mediaClickCounter++;
    } else {
        mediaClickCounter = 0;
        refreshAds();
    }
    return mediaClickCounter;
}
//then do: 
refreshMediaAds(clicks)
...