使用 JavaScript 递增局部变量



我正在尝试增加计数器,但我想将变量移出全局命名空间并在本地声明它。我不知道该怎么做。感谢您的帮助。

这是我目前使用的代码。

var mediaClickCounter = 0;
function refreshMediaAds() {
    if (mediaClickCounter < 2) {
        mediaClickCounter++;
    } else {
        mediaClickCounter = 0;
        refreshAds();
    }
}
// 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.

使用

这样的东西怎么样:

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

然后你可以只使用 ClickCounter.refreshMediaAds() 这将递增成员变量。

这是可能的,你可以创建一些对象并将函数用作其方法。这样,变量将是对象的属性,而不是全局变量。

如果您目前不使用任何框架,使用 MooTools 可能会对您有很大帮助。创建和使用对象的一些示例位于此处:http://mootools.net/docs/core/Class/Class

您可以尝试返回您拥有的内容(以便以后可以根据需要使用它)

function refreshMediaAds(mediaClickCounter) {
    if (mediaClickCounter < 2) {
        mediaClickCounter++;
    } else {
        mediaClickCounter = 0;
        refreshAds();
    }
    return mediaClickCounter;
}
//then do: 
refreshMediaAds(clicks)
function refreshMediaAds() {
var mediaClickCounter = 0; // now variable have local scope.
    if (mediaClickCounter < 2) {
        mediaClickCounter++;
    } else {
        mediaClickCounter = 0;
        refreshAds();
    }
}

如果你真的必须,我相信这样的事情可以解决问题。 但是,IMO 您应该将其保留在全局命名空间中。

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

请注意,我还没有对此进行测试,这是对解决方案的有根据的猜测。

相关内容

  • 没有找到相关文章

最新更新